          SUBROUTINE (OID,START.GEN,LOG.MV,NEW.ORDER,ESC.PATH,CHK.REQD,V.ONLY,REDISP,POST.ENTRY,DISABLE.BODY)
** Version# 314.0502[54] - 07/06/2011 - 02:10pm - SMITJR - eclipse
*** V314.0502 Change - Custom Coding .. - 07/06/2011 - SMITJR - eclipse
*** V314.0501 Change - Custom Coding CUSTOM - 06/30/2011 - SMITJR - eclipse
*** V314.05 Change - Add FULL Ver 320 - 11/17/2009 - EILEENM - r8.6base
*** V314.04 Change - Add FULL Ver 319 - 11/03/2009 - JWITTENB - r8.6base
*** V314.03 Change - Add FULL Ver 318 - 11/02/2009 - JWITTENB - r8.6base
*** V314.02 Change - Add FULL Ver 317 - 10/02/2009 - KRIVERA - r8.6base
*** V314.01 Change - Add FULL Ver 316 - 10/01/2009 - KRIVERA - r8.6base
*** Subroutine: SOE.TOTALS
*-------------------------------------------------------------------------*
*** This screen allows a user to edit the totals for a sales order.
*-------------------------------------------------------------------------*
*** OID        - The order id                                      (IN)
*** START.GEN  - The gen of the order in the screen that call this (IN)
*** LOG.MV     - The list of gens that have been modified          (IN/OUT)
*** NEW.ORDER  - Flag for new order                                (IN)
*** ESC.PATH   - This is no longer used...                         (XX)
*** CHK.REQD   - Flag for cash or credit card info required        (IN)
*** V.ONLY     - This is the default view only value               (IN)
*** REDISP     - Wether the calling program should redisplay       (OUT)
*** POST.ENTRY - Flag for post entry mode                          (IN)
*-------------------------------------------------------------------------*
*** Common Variables:
*** LED                                                      (IN/OUT)
*** OID.DATA$                                                (IN/OUT)
*** OE.LOCKED.DIR$ - If set only allow updating sales order side of
***                  direct and not PO side.
*-------------------------------------------------------------------------*

          IF REMOTE.CUST OR LED(30)<1,START.GEN>='CINV' THEN VIEW.ONLY = YES ELSE VIEW.ONLY = V.ONLY

          UT.SEC3  9,HAS.CC,,NO
          UT.SEC3 28,HAS.CK,,NO

          AUTH.GEN    = START.GEN
          GOSUB CHECK.AUTH.KEYS
          READ CC.RQD FROM CTRLFILE,'CREDIT.CARD.REQD.INFO' ELSE CC.RQD=''

          CTRL.ID = 'CREDIT.CARD.DFLT.TERMS'
          READ DFLT.TRMS FROM CTRLFILE,CTRL.ID ELSE DFLT.TRMS = ''
          TST.DFLT.TRMS = CONVERT(SVM:VM,'',DFLT.TRMS)
          CASH.DFLT.TRMS = DFLT.TRMS<1,1,1>
          CHK.DFLT.TRMS  = DFLT.TRMS<1,1,2>
          CC.DFLT.TRMS   = DFLT.TRMS<1,1,3>
          TERMS.OVRD = NO
          RESET.TERMS = NO
          IF TST.DFLT.TRMS # '' THEN TERMS.OVRD = YES
          CASH.OVRD.TOTAL = 0
          CHK.OVRD.TOTAL  = 0
          CC.OVRD.TOTAL   = 0

          UT.OPEN.COMMON.FILE "CC.PAYMENTS",CC.HNDL
          IF CC.HNDL < 1 THEN
             OPEN.ERR = YES
             RETURN
          END ELSE
             CCPFILE = FILES(CC.HNDL)
          END

          ROEDISP     = YES
          ROE.DISC    = ''
          CMNT        = ''
          LOT.STAT    = 0
          FFACT       = 0
          APPLY.OK    = NO
          REDISP      = NO
          TYPE        = ''
          IF LED(6)<1,START.GEN>='$' THEN PRINT BELL:; RETURN
          QSIGN       = -1
          GEN.MV      = ''
          NEW.OK      = YES
          APP.PAY.FLG = NO
          CHK.PRMPT   = NO
          NEW.PAYMNT  = NO
          VIEW.OVRD   = NO
          PAYMENT.IN.CLOSED = NO
          SV.VIEW.ONLY = VIEW.ONLY
          COLLECT.BR = ''

          ** Recalculate handling across gens if not new order.
          GOSUB RECALC.HNDL

          *** Read Customer's check flags and "Require Check Verf" flag
          GEN         = START.GEN
          PRC.BR      = LED(2)<1,GEN,1>
          BT.CN       = LED(1)<1,GEN>
          ST.CN       = LED(5)<1,GEN>
          GET.CUS PRC.BR, BT.CN, ST.CN
          CHECK.FLAG          = CUSS(31)
          COMPANY.CHECK.FLAG  = CHECK.FLAG<1,1>
          PERSONAL.CHECK.FLAG = CHECK.FLAG<1,2>
          REQ.CK.VERF         = CUSS(166)
          READ AUTHTYPES FROM CTRLFILE,'AUTHTYPES' ELSE AUTHTYPES = ''
          READ AUTH.STATUS FROM CTRLFILE,'AUTH.STATUS' ELSE AUTH.STATUS=''

          WINDOW ,4,,,9,'SOE.TOTALS'

          *** If we are using override terms, redraw the bottom right
          *** corner of the screen.  Redrawing now since we only need
          *** to do this once.
          IF TERMS.OVRD THEN
             PRINT @(28,13):'Ord Terms Disc:'
             PRINT @(28,14):'Terms Net:'                      "L#14"
             PRINT @(55,11):'Ķ'
             PRINT @(55,12):'Cash Due..'
             PRINT @(55,13):'Chk Due...'
             PRINT @(54,14):' CC Due....'
             PRINT @(55,15):''
          END

START:    GOSUB INIT
          GOSUB DISPLAY
          GOSUB LOAD.HOTKEYS

          OE.TRIGGERS 7,OID,GEN,NEW.ORDER,,VIEW.ONLY
V.ONLY:   IF VIEW.ONLY THEN
             PRINT @(2,0):BLINK$:'View Only':NORM$
IN$$1:       INP A,0,0,0
             MOVE = ''
             GOTO FINISH
          END ELSE
             PRINT @(2,0):''
          END

*-------------------------------------------------------------------------*
EDIT:     IF LED(6)<1,GEN,1> = 'P' THEN
             GOTO IN.CASH
          END ELSE
             IF FREIGHT.OK THEN
                GOTO IN.FRT
             END ELSE
                IF HNDLING.OK THEN
                   GOTO IN.HDL
                END ELSE
                   GOTO IN.TAX
                END
             END
          END
*-------------------------------------------------------------------------*
IN.TFRT:  IF FREIGHT.OK THEN
             TMP.TOL.FGHT = TOL.FGHT
             IF OE.LOCKED.DIR$ THEN
                GOTO IN.THDL
             END
IN$$9:       INP AMT,43,1,8,'R2'
             IF CHANGED THEN
                * if it is a direct sales gen, it should not be allowed to
                * to edit the Total Freight, here we will revert the
                * Total Freight value, and give a warning msg
                IF ISDIRECT THEN
                   PRINT @(43,1):ICONV(TOL.FGHT/XRATE,'MR0') "R26#8"
                   MESS 20,5,BELL:'Warning!!! Total Freight is not prorated to Direct Sales'
IN$$2:             INP A,,,0
                END ELSE
                   TOL.FGHT = ICONV(AMT*XRATE,'MR0')
                END

                IF TOL.FGHT AND LED(69)<1,GEN,1> THEN
                   MESS 20,5,BELL:'Warning!!! Customer is Freight Out Exempt.'
IN$$25:            INP A,,,0
                END

                LED(57)<1,1> = TOL.FGHT

                GCT = DCOUNT(LED(12),VM)
                FOR J = 1 TO GCT
                   IF LED(8)<1,J>='' THEN LED(64)<1,J> = ''
                NEXT J

                *** If no overridden freight, prompt user if there is any
                *** freight in/out on this order
                FRT.PMPT = NO
                FOR XX = 1 TO 4
                   IF XX # 2 THEN
                      IF LED(36)<1,GEN,(XX+2)>+0 # 0 THEN
                         FRT.PMPT = YES
                         EXIT
                      END
                   END
                NEXT XX
                ANS = 'N'
                IF FRT.PMPT THEN
IN$$16:            INP.PROMPT ANS,"There is freight in/out on this order, Override? ",'YN',1
                END ELSE
                   ANS = YES
                END

                *** Clear out all freight or set total freight back to what
                *** it was
                IF ANS THEN
                   *** Save override flag so we can check it later
                   SV.OVRD = LED(36)<1,GEN,1>
                   *** Clear overriden freight flag on this gen
                   LED(36)<1,GEN,1> = ''
                   FOR XX = 3 TO 6
                      LED(36)<1,GEN,XX> = 0
                   NEXT XX

                   *** if we have had pass along freight in the past then
                   *** we need to clear any line item freight we may have
                   *** backed out of COGS.
                   IF SV.OVRD = 5 OR SV.OVRD = 6 OR SV.OVRD = 7 THEN
                      REDISP = YES
                      SOE.RECALC.PASS.ALONG.FRT OID,GEN,QSIGN
                   END

                END ELSE
                   LED(57)<1,1> = TMP.TOL.FGHT
                END
                GOSUB INIT
                GOSUB DISPLAY
             END
             IF QUIT THEN GOTO FILEIT
             IF HNDLING.OK THEN
                ON MOVE+1 GOTO IN.TFRT,IN.TFRT,IN.TFRT,IN.THDL,IN.CASH,IN.THDL
             END ELSE
                ON MOVE+1 GOTO IN.TFRT,IN.TFRT,IN.TFRT,IN.TFRT,IN.CASH,IN.FRT
             END
          END ELSE
             IF HNDLING.OK THEN
                ON MOVE+1 GOTO IN.HDL,IN.HDL,IN.HDL,IN.HDL,IN.CASH,IN.HDL
             END ELSE
                ON MOVE+1 GOTO IN.TAX,IN.TAX,IN.TAX,IN.TAX,IN.CASH,IN.TAX
             END
          END
*-------------------------------------------------------------------------*
IN.THDL:  IF HNDLING.OK THEN
             TMP.TOL.HNDL = TOL.HNDL
IN$$15:      INP AMT,69,1,8,'R2'
             IF CHANGED THEN
                * if it is a direct sales gen, it should not be allowed to
                * to edit the Total Handling, here we will revert the
                * Total Hanlding value, and give a warning msg
                IF ISDIRECT THEN
                   PRINT @(69,1):ICONV(TOL.HNDL/XRATE,'MR0') "R26#8"
                   MESS 20,5,BELL:'Warning!!! Total Handling is not prorated to Direct Sales'
IN$$26:            INP A,,,0
                END ELSE
                   TOL.HNDL = ICONV(AMT*XRATE,'MR0')
                END

                IF TOL.HNDL AND CUSS(117)<1,1> THEN
                   MESS 20,5,BELL:'Warning!!! Customer is Handling Out Exempt.'
INTHERR:           INP A,,,0
                END

                LED(57)<1,2> = TOL.HNDL
                GCT = DCOUNT(LED(12),VM)
                FOR J = 1 TO GCT
                   IF LED(8)<1,J>='' THEN LED(64)<1,J> = ''
                NEXT J

                *** If no overridden handling then prompt user if there are
                *** any handling in/out values
                HND.PMPT = NO
                FOR XX = 1 TO 4
                   IF XX # 2 THEN
                      IF LED(36)<1,GEN,(XX+6)>+0 # 0 THEN
                         HND.PMPT = YES
                         EXIT
                      END
                   END
                NEXT XX

                ANS = 'N'
                IF HND.PMPT THEN
IN$$17:            INP.PROMPT ANS,"There is Handling in/out on this order, Override? ",'YN',1
                END ELSE
                   ANS = YES
                END

                *** Clear out all handling or set total handling back to what
                *** it was
                IF ANS THEN
                   *** Clear overridden handling flag on this gen
                   LED(36)<1,GEN,2> = ''
                   FOR XX = 1 TO 4
                      LED(36)<1,GEN,(XX+6)> = ''
                   NEXT XX
                END ELSE
                   LED(57)<1,2> = TMP.TOL.HNDL
                END
                GOSUB INIT
                GOSUB DISPLAY
             END
             IF QUIT THEN GOTO FILEIT
             IF FREIGHT.OK THEN
                ON MOVE+1 GOTO IN.THDL,IN.TFRT,IN.THDL,IN.THDL,IN.CASH,IN.FRT
             END ELSE
                ON MOVE+1 GOTO IN.THDL,IN.THDL,IN.THDL,IN.THDL,IN.CASH,IN.HDL
             END
          END ELSE
             IF FREIGHT.OK THEN
                ON MOVE+1 GOTO IN.FRT,IN.FRT,IN.FRT,IN.FRT,IN.CASH,IN.FRT
             END ELSE
                ON MOVE+1 GOTO IN.TAX,IN.TAX,IN.TAX,IN.TAX,IN.CASH,IN.TAX
             END
          END
*-------------------------------------------------------------------------*
IN.FRT:   IF FREIGHT.OK THEN
IN.FRTAMT:   INP AMT,13,4,12,"N2"
             IF CHANGED THEN
                OLD.FREIGHT = ICONV(FREIGHT*XRATE,'MR0')
                IF SUM(LED(44)<1,GEN>) # 0 THEN
                   MESS 20,5,BELL:'Box freight must be zeroed before overriding here!'
IN$$3:             INP A,,,0
                   IF LOT.STAT = 1 AND NOT(FGHT.OVRD) THEN
                      F.ADDL = 2
                   END ELSE
                      IF FGHT.OVRD+0 # 0 THEN
                         F.ADDL = 1
                      END ELSE
                         F.ADDL = FGHT.OVRD
                      END
                   END
                   PRINT @(13,4):ICONV(FREIGHT/XRATE,'MR0')  "R26#12":' *L'[F.ADDL+1,1]
                   GOTO IN.FRT
                END
                IF AMT#'' THEN
                   FREIGHT = ICONV(AMT*XRATE,'MR0')
                END ELSE
                   FREIGHT = ''
                END
                IF FREIGHT AND LED(69)<1,GEN,1> THEN
                   A = ''
                   MSG = BELL:'Warning!!! Customer is Freight Out Exempt.'
IN.FAL:            INP.PROMPT A,MSG,,0
                END
                IF FREIGHT AND LED(8)<1,GEN> = "" THEN
                   A = ''
                   MSG = BELL:'Warning!!! Freight May Not Be Applied ':AM:'if This Segment is Cancelled or':AM:'Otherwise Does Not Ship.'
IN.FWARN:          INP.PROMPT A,MSG,,0
                END

                IF LED(48)<1,GEN>='' THEN
                   ERR.MESS 15,12,BELL:'Warning!! No items current on this Shipment.':AM:'Press Up Arrow to use "Total Freight".'
IN.FWARN2:         INP A,,,0
                END

                OLD.TAX.TOL = TAX.TOL
                GOSUB UPD.FRT
                OE.CMT  = 'Freight Amount was Changed from $'
                OE.CMT := OCONV(OLD.FREIGHT,'MR2')
                IF TAX.TOL # OLD.TAX.TOL THEN
                  OE.CMT := ". Freight is taxable, tax changed from $"
                  OE.CMT := OCONV(OLD.TAX.TOL,'MR2')
                END
                OE.ADD.COMMENT OID,GEN,OE.CMT
             END
             IF QUIT THEN GOTO FILEIT
             *** If invoiced gen, do not let into totals
             IF LED(6)<1,GEN> = 'I' THEN
                ON MOVE+1 GOTO IN.FRT, IN.FRT, IN.FRT, IN.CASH, IN.HDL
             END ELSE
                ON MOVE+1 GOTO IN.FRT, IN.FRT, IN.TFRT, IN.CASH, IN.HDL
             END
          END ELSE
             IF HNDLING.OK THEN
                ON MOVE+1 GOTO IN.HDL, IN.HDL, IN.THDL, IN.CASH, IN.HDL
             END ELSE
                ON MOVE+1 GOTO IN.TAX, IN.TAX, IN.TAX, IN.CASH, IN.TAX
             END
          END
*------------------------------------------------------------------------*
IN.HDL:   IF HNDLING.OK THEN
IN.HDLAMT:   INP AMT,13,5,12,"N2"
             IF CHANGED THEN
                OLD.HANDLING = ICONV(HANDLING*XRATE,'MR0')
                IF AMT # '' THEN
                   HANDLING = ICONV(AMT*XRATE,'MR0')
                END ELSE
                   HANDLING = ''
                END
                IF HANDLING AND CUSS(117)<1,1> THEN
                   MESS 20,5,BELL:'Warning!!! Customer is Handling Out Exempt.'
INHERR:            INP A,,,0
                END

                OLD.TAX.TOL = TAX.TOL
                GOSUB UPD.HDL
                OE.CMT  = 'Handling Amount was Changed from $'
                OE.CMT := OCONV(OLD.HANDLING,'MR2')
                IF TAX.TOL # OLD.TAX.TOL THEN
                  OE.CMT := ". Handling is taxable, tax changed from $"
                  OE.CMT := OCONV(OLD.TAX.TOL,'MR2')
                END
                OE.ADD.COMMENT OID,GEN,OE.CMT
             END
             IF QUIT THEN GOTO FILEIT
             IF LOT.STAT # 1 THEN
                ON MOVE+1 GOTO IN.HDL,IN.HDL,IN.FRT,IN.CASH
             END ELSE
                ON MOVE+1 GOTO IN.HDL,IN.HDL,IN.FRT,IN.CASH,IN.EARN,IN.EARN
             END
          END ELSE
             IF LOT.STAT # 1 THEN
                ON MOVE+1 GOTO IN.TAX,IN.TAX,IN.TAX,IN.CASH
             END ELSE
                ON MOVE+1 GOTO IN.TAX,IN.TAX,IN.TAX,IN.CASH,IN.EARN,IN.EARN
             END
          END
*-------------------------------------------------------------------------*
IN.TAX:   IF TAX.LVL > 2 THEN
IN$$4:       INP AMT,13,6,12,"N2"
             IF CHANGED THEN
                IF AMT # '' THEN TAX.AMT = ICONV(AMT*XRATE,'MR0') ELSE TAX.AMT=''
                OE.ORDER.TOTAL OID:VM:1,GEN,QSIGN,,,,,OLD.TAX
                LED(60)<1,GEN> = TAX.AMT
                LED(64)<1,GEN> = TAX.AMT
                OE.TAX.CLEAR OID,GEN
                PRINT @(25,6):
                IF LED(60)<1,GEN> THEN PRINT '*' ELSE PRINT ' '
                OE.TAX.CALC OID,GEN,QSIGN,TAX.AMTS
                IF ERR THEN
                   MESS 5,2,BELL:'No Tax Jurisdiction Assigned.. Press <Enter> to Continue..'
IN$$5:             INP A,,,0
                END
                TAX.TOL = SUM(TAX.AMTS)
                OE.ADD.COMMENT OID,GEN,'Tax Amount was Changed from $':OCONV(OLD.TAX,'MR2')
                GOSUB ADD.GEN.MV
                GOSUB UPD.GENS
                GOSUB INIT.GEN
                GOSUB DISPLAY
             END
             IF QUIT THEN GOTO FILEIT
             IF HNDLING.OK THEN
                ON MOVE+1 GOTO IN.TAX, IN.TAX, IN.HDL, IN.CASH
             END ELSE
                IF FREIGHT.OK THEN
                   ON MOVE+1 GOTO IN.TAX, IN.TAX, IN.FRT, IN.CASH
                END ELSE
                   ON MOVE+1 GOTO IN.TAX, IN.TAX, IN.TAX, IN.CASH
                END
             END
          END ELSE
             IF HNDLING.OK THEN
                ON MOVE+1 GOTO IN.HDL,IN.HDL,IN.CASH
             END ELSE
                ON MOVE+1 GOTO IN.CASH,IN.CASH,IN.CASH
             END
          END
*-------------------------------------------------------------------------*
IN.EARN:  CHECK.KEY 'SOE.SINGLE.INVOICE',ENTRY.OK,LEVEL
          IF LEVEL > 2 THEN
IN$$6:       INP AMT,13,10,12,'N2'
             IF CHANGED THEN
                UNEARN = ICONV(AMT*XRATE,'MR0')
                GOSUB CHK.UNE
                IF GL.ERR THEN
                   UNEARN= 0
                   PRINT @(13,9):OCONV(UNEARN,'MR2') "R2#12"
                   GOTO IN.EARN
                END
                GOSUB UPD.EARN
             END
             IF QUIT THEN GOTO FILEIT
             IF LOT.STAT # 1 THEN
                ON MOVE+1 GOTO IN.EARN,IN.EARN,IN.TAX,INSING,IN.EARN,IN.EARN
             END ELSE
                IF HNDLING.OK THEN
                   ON MOVE+1 GOTO IN.EARN,IN.EARN,IN.HDL,INSING,IN.EARN,IN.EARN
                END ELSE
                   ON MOVE+1 GOTO IN.EARN,IN.EARN,IN.TAX,INSING,IN.EARN,IN.EARN
                END
             END
          END ELSE
             MOVE = 2
             IF LOT.STAT # 1 THEN
                GOTO IN.TAX
             END ELSE
                IF HNDLING.OK THEN GOTO IN.HDL ELSE GOTO IN.TAX
             END
          END
*-------------------------------------------------------------------------*
IN.PDT:   CHECK.KEY 'SOE.PAYMENT.EDIT',EDIT.OK
          IF EDIT.OK THEN
             GOSUB PAY.MISC
             PRINT @(70,4):OCONV(PAYMENT.DT,'D2/')"L#8"
          END
*-------------------------------------------------------------------------*
          *** Enter cash received
IN.CASH:  IF PAYMENT.IN.CLOSED THEN
             MESS 42,5,'Payment is In G/L Closed Period',YES
             IF FREIGHT.OK THEN GOTO IN.FRT ELSE GOTO V.ONLY
          END
IN$$12:   INP AMT,42,5,12,'N2'

          *** Skip input statement when coming from Alt-C hotkey
IN.CASH2: IF CHANGED OR O.CASH.RECVD+0 # AMT THEN
             * Check first to make sure this isn't a return and they have
             * auth to do this.
             GOSUB GET.CC.AUTH
             IF CHANGE.CC.OK = NO THEN
                PRINT @(42,5):ICONV(CASH.RECVD/NXRATE,'MR0') "R26#12"
                GOTO IN.CASH
             END

             IF AMT # 0 THEN
                NEW.PAYMNT = YES

                * If no payments have been made yet, check control for
                * default override terms
                IF NOT(SUMMATION(LED(45))) AND CASH.DFLT.TRMS THEN
                   OVRD.TERMS = CASH.DFLT.TRMS
                   GOSUB UPD.TERMS.OVRD
                END
             END ELSE
                * If we are changing a payment back to 0, we may need
                * to reset the terms
                IF LED(135)<1,GEN> THEN
                   RESET.TERMS = YES
                   GOSUB UPD.TERMS.OVRD
                END
             END
             CASH.RECVD = ICONV(AMT*NXRATE,'MR0')
             IF CASH.RECVD > AMT.DUE AND AMT.DUE+0>0 THEN
                CHANGE.AMT = CASH.RECVD - AMT.DUE
             END ELSE CHANGE.AMT = 0
             SV.CASH.RECVD  = CASH.RECVD
             SV.CHANGE.AMT  = CHANGE.AMT
             SV.CHECK.RECVD = 0
             SV.CHECK.NO    = ''
             SV.AUTH.CODE   = ''
             SV.GIFT.RECVD  = 0
             SV.GIFT.NO     = ''
             EDIT.PREV.GC   = NO
             *** If check, CC, or gift payment exists, create new gen
             ABS.TTL.PMTS = ABS(LED(45)<1,PGEN,2>) + ABS(LED(45)<1,PGEN,3>)
             ABS.TTL.PMTS += ABS(LED(45)<1,PGEN,4>)
             GOSUB CHK.PMT
             IF SV.CHANGE.AMT # 0 THEN
                *** The UPD.GENS process nets cash received and change,
                *** so this is here to redisplay the original cash info
                PRINT @(42,5):ICONV(SV.CASH.RECVD/NXRATE,'MR0') "R26#12"
                PRINT @(62,5):ICONV(SV.CHANGE.AMT/NXRATE,'MR0') "R26#12"
                PRINT @(42,8):ICONV(SV.GIFT.RECVD/NXRATE,'MR0') "R26#12"
             END
          END

          IF QUIT THEN GOTO FILEIT
          BEGIN CASE
          CASE HNDLING.OK
             ON MOVE+1 GOTO IN.CASH, IN.HDL, IN.PDT, IN.CHNG, IN.CHK
          CASE FREIGHT.OK
             ON MOVE+1 GOTO IN.CASH, IN.FRT, IN.PDT, IN.CHNG, IN.CHK
          CASE TAX.OK
             ON MOVE+1 GOTO IN.CASH, IN.TAX, IN.PDT, IN.CHNG, IN.CHK
          CASE UNEARNED.OK
             ON MOVE+1 GOTO IN.CASH, IN.EARN, IN.PDT, IN.CHNG, IN.CHK
          CASE OTHERWISE
             ON MOVE+1 GOTO IN.CASH, IN.TAX, IN.PDT, IN.CHNG, IN.CHK
          END CASE
          IF CHANGE.AMT=0 THEN GOTO IN.CHK
*-------------------------------------------------------------------------*
IN.CHNG:  IF PAYMENT.IN.CLOSED THEN
             MESS 62,5,'Payment is In G/L Closed Period',YES
             GOTO IN.FRT
          END
IN$$23:   INP AMT,62,5,12,'N2'
          IF CHANGED THEN
             CHANGE.AMT = ICONV(AMT*NXRATE,'MR0')
          END
          IF CHANGE.AMT>CASH.RECVD AND (CHANGE.AMT#0 OR CASH.RECVD>0) THEN
             PRINT BELL:; GOTO IN.CHNG
          END
          IF CHANGED THEN
             *** Set CASH.RECVD to the actual amount tendered. It will be
             *** netted with CHANGE.AMT in UPD.GENS, but the original
             *** amounts will be redisplayed below.
             CASH.RECVD     = SV.CASH.RECVD
             SV.CHANGE.AMT  = CHANGE.AMT
             SV.CHECK.RECVD = 0
             SV.CHECK.NO    = ''
             SV.AUTH.CODE   = ''
             SV.GIFT.RECVD  = 0
             SV.GIFT.NO     = ''
             EDIT.PREV.GC   = NO
             *** If check, CC, or gift payment exists, create new gen
             ABS.TTL.PMTS = ABS(LED(45)<1,PGEN,2>) + ABS(LED(45)<1,PGEN,3>)
             ABS.TTL.PMTS += ABS(LED(45)<1,PGEN,4>)
             GOSUB CHK.PMT
             *** The UPD.GENS process nets cash received and change,
             *** so this is here to redisplay the original cash info
             PRINT @(42,5):ICONV(SV.CASH.RECVD/NXRATE,'MR0') "R26#12"
             PRINT @(62,5):ICONV(SV.CHANGE.AMT/NXRATE,'MR0') "R26#12"
             PRINT @(42,8):ICONV(SV.GIFT.RECVD/NXRATE,'MR0') "R26#12"
          END

          IF QUIT THEN GOTO FILEIT
          ON MOVE+1 GOTO IN.CHNG, IN.CASH, IN.PDT, IN.CHNG, IN.CHK.NO
*-------------------------------------------------------------------------*
          *** Enter check amount
IN.CHK:   IF PAYMENT.IN.CLOSED THEN
             MESS 42,6,'Payment is In G/L Closed Period',YES
             GOTO IN.FRT
          END
IN$$24:   INP AMT,42,6,12,'N2'

          *** Skip input statement when coming from Alt-E hotkey
IN.CHK2:  IF CHANGED OR O.CHECK.RECVD+0 # AMT THEN
             IF NOT(CHK.PRMPT) THEN
                GOSUB CHECK.PMNT.FLAGS
                IF ASSIGNED(DO.ABORT) AND DO.ABORT THEN
                   PRINT @(42,6):SV.DISP.CHK.AMT "R26#12"
                   GOTO IN.CHK
                END
             END

             * Check first to make sure this isn't a return and they have
             * auth to do this.
             GOSUB GET.CC.AUTH
             IF CHANGE.CC.OK = NO THEN
                PRINT @(42,6):SV.DISP.CHK.AMT "R26#12"
                GOTO IN.CHK
             END

             IF AMT # 0 THEN
                NEW.PAYMNT = YES

                * If no payments have been made yet, check control for
                * default override terms
                IF NOT(SUMMATION(LED(45))) AND CHK.DFLT.TRMS THEN
                   OVRD.TERMS = CHK.DFLT.TRMS
                   GOSUB UPD.TERMS.OVRD
                END
             END ELSE
                * If we are changing a payment back to 0, we may need
                * to reset the terms
                IF LED(135)<1,GEN> THEN
                   RESET.TERMS = YES
                   GOSUB UPD.TERMS.OVRD
                END
             END

             IF HAS.CK AND REQ.CK.VERF AND NEW.PAYMNT THEN
                *** Put every new transaction on it's own PGEN
                PGEN = DCOUNT(LED(12),VM)+1
                GOSUB PMT.INIT
                IF AMT > 0 THEN     ;* Only do verfs on positive amounts
                   SOE.CHECK.AUTH OID,PGEN,GEN,AMT,CHECK.NO,AUTH.CODE,VIEW.ONLY,CHK.TYP,ID.TYP,ID.NUM,ROUTING.NUM,ACCT.NUM
                   IF NOT(AUTH.CODE) OR AUTH.CODE = 'DECL' OR AUTH.CODE = 'FAIL' THEN
                      CHECK.RECVD = 0
                      CHECK.NO    = ''
                      PRINT @(42,6):CHECK.RECVD "R26#12"
                      PRINT @(62,6):CHECK.NO    "L#16"
                      SV.DISP.CHK.AMT = CHECK.RECVD
                      SV.DISP.CHECK.NO = CHECK.NO
                      GOSUB UPD.GENS
                      GOTO IN.CHK
                   END ELSE
                      TYPE      = ''
                      TYPE<1,2> = CHK.TYP
                      TYPE<1,3> = ID.TYP
                      TYPE<1,4> = ID.NUM
                      TYPE<1,5> = ROUTING.NUM
                      TYPE<1,6> = ACCT.NUM
                   END
                END
             END
             CHECK.RECVD    = ICONV(AMT*NXRATE,'MR0')
             SV.CHECK.RECVD = CHECK.RECVD
             SV.CHECK.NO    = CHECK.NO
             SV.AUTH.CODE   = AUTH.CODE
             SV.CASH.RECVD  = 0
             SV.CHANGE.AMT  = 0
             SV.GIFT.RECVD  = 0
             SV.GIFT.NO     = ''
             EDIT.PREV.GC   = NO
             *** If cash, CC, or gift payment exists, create new gen
             ABS.TTL.PMTS = ABS(LED(45)<1,PGEN,1>) + ABS(LED(45)<1,PGEN,3>)
             ABS.TTL.PMTS += ABS(LED(45)<1,PGEN,4>)
             GOSUB CHK.PMT
          END
          IF QUIT THEN GOTO FILEIT
          BEGIN CASE
          CASE HNDLING.OK
             ON MOVE+1 GOTO IN.CHK, IN.HDL, IN.CASH, IN.CHK.NO, IN.CARD
          CASE FREIGHT.OK
             ON MOVE+1 GOTO IN.CHK, IN.FRT, IN.CASH, IN.CHK.NO, IN.CARD
          CASE TAX.OK
             ON MOVE+1 GOTO IN.CHK, IN.TAX, IN.CASH, IN.CHK.NO, IN.CARD
          CASE UNEARNED.OK
             ON MOVE+1 GOTO IN.CHK, IN.EARN, IN.CASH, IN.CHK.NO, IN.CARD
          CASE OTHERWISE
             ON MOVE+1 GOTO IN.CHK, IN.TAX, IN.CASH, IN.CHK.NO, IN.CARD
          END CASE
          IF CHECK.RECVD=0 THEN GOTO IN.CARD
*-------------------------------------------------------------------------*
IN.CHK.NO: *
          IF PAYMENT.IN.CLOSED THEN
             MESS 62,6,'Payment is In G/L Closed Period',YES
             GOTO IN.FRT
          END
          SV.CHECK.NO = CHECK.NO
IN$$8:    INP CHECK.NO,62,6,15
          IF CHANGED THEN
             IF NOT(CHK.PRMPT) THEN
                GOSUB CHECK.PMNT.FLAGS
                IF ASSIGNED(DO.ABORT) AND DO.ABORT THEN
                    PRINT @(62,6):SV.DISP.CHECK.NO "L#12"
                    GOTO IN.CHK.NO
                END
             END
             IF HAS.CK AND REQ.CK.VERF THEN
                IF CHECK.RECVD < 0 THEN
                   *** Allow check # entry for negative amts (reversals)
                   NULL
                END ELSE
                   CHECK.NO = SV.CHECK.NO
                   GOSUB DISPLAY
                   MSG = BELL:'Enter Check Number On Check Authorization Screen.'
                   A = ''
IN$$20:            INP.PROMPT A,MSG,,0
                   GOTO IN$$8
                END
             END
             GOSUB UPD.GENS
             GOSUB DISP.PAYMENT
          END
          IF QUIT THEN GOTO FILEIT
          ON MOVE+1 GOTO IN.CHK.NO, IN.CHK, IN.CHK.NO, IN.CHK.NO,IN.CARD
*-------------------------------------------------------------------------*
IN.CARD:
          IF PAYMENT.IN.CLOSED THEN
             MESS 42,7,'Payment is In G/L Closed Period',YES
             GOTO IN.FRT
          END
          SV.CCARD.RECVD = CCARD.RECVD
IN.CARD1: INP AMT,42,7,12,'N2'
          AMT = ICONV(OCONV(AMT,'MR2') * XRATE,'MR2')
          IF NOT(CHANGED) AND MOVE+1#4 THEN GOTO SKIPCCARD
          IF AMT > TOTAL THEN
             PRMPT = 'You entered ':OCONV(AMT,'MR2'):' which is greater '
             PRMPT := 'than the open balance ':OCONV(TOTAL,'MR2')
             PRMPT := ', for this generation.  Continue (Y/N): '
             RESP = ''
CONT.PRMPT:  INP.PROMPT RESP,PRMPT,'YN_',1
             IF RESP = '' THEN GOTO CONT.PRMPT
             IF RESP = 0 THEN
                AMT = 0
                GOSUB DISPLAY
                GOTO IN.CARD
             END
          END


          CCARD.RECVD = AMT
          IF AMT # 0 THEN
             NEW.PAYMNT = YES
          END ELSE
             * If we are changing a payment back to 0, we may need
             * to reset the terms
             IF LED(135)<1,GEN> THEN
                RESET.TERMS = YES
                GOSUB UPD.TERMS.OVRD
             END
          END



          *** Come here from Payment List- PGEN and CCARD.RECVD is set
CC.SALE:  *

          CC.PAY.ID = ''

          *** Credit Card MOD - Put every new transaction on it's own
          *** PGEN or if cash, check, or gift payment exists put in a
          *** new payment gen.
          IF HAS.CC OR LED(45)<1,PGEN,1> OR LED(45)<1,PGEN,2> OR LED(45)<1,PGEN,4> THEN
             PGEN = DCOUNT(LED(12),VM)+1
             SV.CCARD.RECVD = CCARD.RECVD
             GOSUB PMT.INIT
             CCARD.RECVD = SV.CCARD.RECVD
          END

          *** User Has selected a Credit Card Transaction from the payment
          *** list
CC.TRANSACTION:

          *This is a credit card payment, we don't want to use the TTY
          *branch as the payment branch. It has to be the collection branch
          * or the gl branch
          IF COLLECT.BR OR NOT(HAS.CC) THEN
             PAYMENT.BR = COLLECT.BR
          END ELSE
          * the gl branch
             PAYMENT.BR = GL.BR
          END
          * If new credit card payment, initialize payment date. It will be
          * set to today in SOE.TOTALS.SET.PAY
          IF NEW.PAYMNT THEN
             PAYMENT.DT = ''
          END
          *** Set variables necessary to make payment
          SOE.TOTALS.SET.PAY OID,GEN,PGEN,CASH.RECVD,CHECK.RECVD,CCARD.RECVD,GL.BR,PAYMENT.BR,COLLECT.BY,COLLECT.LOCA,COLLECT.TIME,PAYMENT.DT,CHANGE.AMT,CHECK.NO,CCARD.NO,AUTH.CODE,GEN.MV,LOG.MV,CMNT,PAY.INFO,TYPE,REFNO,COLLECT.BR,GIFT.RECVD,GIFT.NO

          *** Site does not have credit card MOD and is not requiring
          *** credit card information.  Do not pop credit card
          *** authorization screen. Just record payment dollars.
          IF NOT(HAS.CC) AND NOT(CC.RQD) THEN
             BEGIN CASE
             CASE O.CCARD.RECVD = '' AND CCARD.RECVD+0 # 0
                CMNT<-1> = 'Credit Card Payment taken for $':OCONV(CCARD.RECVD,'MR2')
             CASE CCARD.RECVD # O.CCARD.RECVD AND O.CCARD.RECVD # ''
                CMNT<-1> = 'Credit Card Amount Changed from $':OCONV(O.CCARD.RECVD,'MR2'):' to $':OCONV(CCARD.RECVD,'MR2')
             END CASE

             IF CCARD.RECVD # 0 THEN
                * If no payments have been made yet, check control for
                * default override terms
                IF NOT(SUMMATION(LED(45))) AND CC.DFLT.TRMS THEN
                   OVRD.TERMS = CC.DFLT.TRMS
                   GOSUB UPD.TERMS.OVRD
                END
             END ELSE
                * If we are changing a payment back to 0, we may need
                * to reset the terms
                IF LED(135)<1,GEN> THEN
                   RESET.TERMS = YES
                   GOSUB UPD.TERMS.OVRD
                END
             END

             GOSUB UPD.GENS
             GOTO SKIPAUTH
          END

          *** Set total due on this GEN so it can be displayed on Credit
          *** Card Screen
          GEN.TOTAL = TOTAL - CHECK.RECVD - CASH.RECVD

          *** Input data and attempt to authorize Credit Card Payment
          *** Payment azd Ledger Record will be updated here
          SOE.CREDIT.AUTH OID,PGEN,GEN,CCARD.RECVD,VIEW.ONLY,PAY.INFO,CC.PAY.ID,GEN.TOTAL,AMT.DUE,CHANGE.CC.OK

          *** Reset local variables from PAY.INFO
          SOE.TOTALS.GET.PAY OID,GEN,PGEN,CASH.RECVD,CHECK.RECVD,CCARD.RECVD,GL.BR,PAYMENT.BR,COLLECT.BY,COLLECT.LOCA,COLLECT.TIME,PAYMENT.DT,CHANGE.AMT,CHECK.NO,CCARD.NO,AUTH.CODE,GEN.MV,LOG.MV,CMNT,PAY.INFO,TYPE,REFNO,COLLECT.BR,GIFT.RECVD,GIFT.NO

SKIPAUTH: *

          GOSUB INIT.GEN

SKIPCCARD:   *

          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          IF QUIT THEN GOTO FILEIT
          BEGIN CASE
          CASE PAYMENT.IN.CLOSED
             BEGIN CASE
             CASE FREIGHT.OK;  GOTO IN.FRT
             CASE HNDLING.OK;  GOTO IN.HDL
             CASE TAX.LVL > 2; GOTO IN.TAX
             CASE UNEARNED.OK; GOTO IN.EARN
             CASE OTHERWISE
                IF NOT(VIEW.OVRD) THEN
                   SV.VIEW.ONLY = VIEW.ONLY
                   VIEW.ONLY = YES
                   VIEW.OVRD = YES
                END
                GOTO V.ONLY
             END CASE
          CASE HNDLING.OK
             ON MOVE+1 GOTO IN.CARD,IN.HDL,IN.CHK,IN.CARD,IN.GIFT,IN.GIFT
          CASE FREIGHT.OK
             ON MOVE+1 GOTO IN.CARD,IN.FRT,IN.CHK,IN.CARD,IN.GIFT,IN.GIFT
          CASE OTHERWISE
             ON MOVE+1 GOTO IN.CARD,IN.TAX,IN.CHK,IN.CARD,IN.GIFT,IN.GIFT
          END CASE
*-------------------------------------------------------------------------*
          *** Enter Gift Card/Certificate amount received
IN.GIFT:  INP AMT,42,8,12,'N2'

          IF CHANGED AND AMT # 0 THEN
             * Check first to make sure this isn't a return and they have
             * auth to do this.
             GOSUB GET.CC.AUTH
             IF CHANGE.CC.OK = NO THEN
                PRINT @(42,8):ICONV(GIFT.RECVD/NXRATE,'MR0') "R26#12"
                GOTO IN.GIFT
             END
             NEW.PAYMNT = YES
          END

          GIFT.RECVD = ICONV(AMT*NXRATE,'MR0')
          PRINT @(42,8):ICONV(GIFT.RECVD/NXRATE,'MR0') "R26#12"

          * If this is an existing GC payment we need to adjust the
          * balance on the GC record
          IF EDIT.PREV.GC AND (GIFT.RECVD # O.GIFT.RECVD) THEN
             IF GIFT.NO THEN
                GIFT.BAL += O.GIFT.RECVD

                IF GIFT.RECVD > GIFT.BAL THEN
                   GIFT.BAL.MSG  = 'Gift Card Balance: $'
                   GIFT.BAL.MSG := OCONV(GIFT.BAL,'MR2')
                   GIFT.BAL.MSG := AM:'Additional Payment Required'
                   ERR.MESS 28,9,BELL:GIFT.BAL.MSG,YES
                   GIFT.RECVD = GIFT.BAL
                   GIFT.RECVD = ICONV(GIFT.RECVD*NXRATE,'MR0')
                   PRINT @(42,8):ICONV(GIFT.RECVD/NXRATE,'MR0') "R26#12"
                END
             END
          END
          IF GIFT.RECVD OR EDIT.PREV.GC THEN
             IF NOT(EDIT.PREV.GC) THEN
                PGEN = DCOUNT(LED(12),VM)+1
             END
             SV.GIFT.RECVD = GIFT.RECVD
             SV.GIFT.NO    = GIFT.NO
             GOSUB PMT.INIT
             GIFT.RECVD = SV.GIFT.RECVD
             GIFT.NO    = SV.GIFT.NO
          END
          IF GIFT.NO THEN
             GOSUB UPD.GENS
             GOSUB INIT.GEN
             GOSUB DISPLAY
          END
          IF QUIT THEN GOTO FILEIT
          BEGIN CASE
          CASE GIFT.RECVD AND GIFT.RECVD # 0 AND NOT(GIFT.NO)
             ON MOVE+1 GOTO IN.GIFT
          CASE HNDLING.OK
             ON MOVE+1 GOTO IN.GIFT,IN.HDL,IN.CARD
          CASE FREIGHT.OK
             ON MOVE+1 GOTO IN.GIFT,IN.FRT,IN.CARD
          CASE OTHERWISE
             ON MOVE+1 GOTO IN.GIFT,IN.TAX,IN.CARD
          END CASE
*-------------------------------------------------------------------------*
*** Gift Card/Certificate Number
IN.GC.NO: INP GIFT.NO,62,8,15,'MCU'

          IF GIFT.RECVD THEN
             IF GIFT.NO = '' THEN
                IF MOVE+1 = 2 THEN GOTO IN.GIFT

                ERR.MESS 28,9,BELL:'Gift Card Number Required',YES
                GOTO IN.GC.NO
             END

             IF CHANGED THEN
                READ GIFT.REC FROM GIFTCERTFILE,GIFT.NO THEN
                   GIFT.BAL = GIFT.REC<3>
                   GIFT.EXP = GIFT.REC<5>
                   GIFT.GL  = GIFT.REC<10>
                   PAYMENT.BR = FIELD(GIFT.GL,'~',1)
                END ELSE
                   ERR.MESS 28,9,BELL:'Gift Card Not Found',YES
                   GIFT.NO  = ''
                   GIFT.BAL = ''
                   GIFT.EXP = ''
                   PRINT @(62,8):SPACE(15)
                   GOTO IN.GC.NO
                END

                IF GIFT.EXP # '' THEN
                   IF DATE() > GIFT.EXP THEN
                      PRMPT.CMT = 'Use an Expired Gift Card'
                      KEY.REQD  = 'GIFT.CERTIFICATE.EDIT'
                      OE.GET.AUTH OID,PRMPT.CMT,KEY.REQD,OVERRIDE.OK
                      IF NOT(OVERRIDE.OK) THEN
                         GIFT.NO = ''
                         PRINT @(62,8):SPACE(15)
                         GOTO IN.GC.NO
                      END
                   END
                END

                IF GIFT.BAL = 0 THEN
                   ERR.MESS 28,9,BELL:'Gift Card Balance: $0',YES
                   GIFT.NO = SV.GIFT.NO
                   PRINT @(62,8):GIFT.NO "L#15"
                   GOTO IN.GC.NO
                END

                IF GIFT.RECVD > GIFT.BAL THEN
                   GIFT.BAL.MSG  = 'Gift Card Balance: $'
                   GIFT.BAL.MSG := OCONV(GIFT.BAL,'MR2')
                   GIFT.BAL.MSG := AM:'Additional Payment Required'
                   ERR.MESS 28,9,BELL:GIFT.BAL.MSG,YES
                   GIFT.RECVD = GIFT.BAL
                   GIFT.RECVD = ICONV(GIFT.RECVD*NXRATE,'MR0')
                   PRINT @(42,8):ICONV(GIFT.RECVD/NXRATE,'MR0') "R26#12"
                END
             END

             SV.GIFT.RECVD  = GIFT.RECVD
             SV.GIFT.NO     = GIFT.NO
             SV.CHECK.RECVD = 0
             SV.CHECK.NO    = ''
             SV.AUTH.CODE   = ''
             SV.CASH.RECVD  = 0
             SV.CHANGE.AMT  = ''

             * If cash, check, or CC payment exists, create new gen
             ABS.TTL.PMTS  = ABS(LED(45)<1,PGEN,2>)+ABS(LED(45)<1,PGEN,3>)
             ABS.TTL.PMTS += ABS(LED(45)<1,PGEN,1>)
             GOSUB CHK.PMT
          END ELSE
             PRINT @(62,8):SPACE(15)
          END

          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          IF QUIT THEN GOTO FILEIT
          ON MOVE+1 GOTO IN.GC.NO,IN.GIFT,IN.GC.NO,IN.GC.NO,INSING,INSING
*-------------------------------------------------------------------------*
INSING:   CHECK.KEY 'SOE.SINGLE.INVOICE',ENTRY.OK,LEVEL
          IF NOT(LEVEL) THEN GOTO IN.PDT
INLED86:  INP LED(86),53,12,1,'YN'
          IF CHANGED AND NOT(LED(86)) AND LEVEL<2 THEN
             LED(86) = YES
             PRINT BELL:@(53,12):'Y'
             GOTO INSING
          END
          IF LED(86) THEN
             GOSUB CHK.UNE
             IF GL.ERR THEN
                PRINT @(53,12):'N' "L#1"
                LED(86) = NO
                GOTO INSING
             END
          END
          IF QUIT THEN GOTO FILEIT
          ON MOVE+1 GOTO INSING,INSING,IN.GIFT,INSING,INSING,INSING
*-------------------------------------------------------------------------*
CHK.PMT:  * If payments of another type exist, create a new payment gen
          IF ABS.TTL.PMTS + 0 # 0 THEN
             PGEN = DCOUNT(LED(12),VM) + 1
             GOSUB PMT.INIT
             *** This can be called from cash or check payment, so this
             *** is necessary to determine which one we came from. The new
             *** gen which was created will be initialized to zero so we
             *** need to format it with the newly entered data.
             IF SV.CASH.RECVD # CASH.RECVD THEN
                CASH.RECVD = SV.CASH.RECVD
                CHANGE.AMT = SV.CHANGE.AMT
             END
             IF SV.CHECK.RECVD # CHECK.RECVD THEN
                CHECK.RECVD = SV.CHECK.RECVD
                CHECK.NO    = SV.CHECK.NO
                AUTH.CODE   = SV.AUTH.CODE
             END
             IF SV.GIFT.RECVD # GIFT.RECVD THEN
                GIFT.RECVD = SV.GIFT.RECVD
                GIFT.NO    = SV.GIFT.NO
             END
          END
          IF CASH.RECVD  = 0 THEN CASH.RECVD  = ''
          IF CHECK.RECVD = 0 THEN CHECK.RECVD = ''
          IF CCARD.RECVD = 0 THEN CCARD.RECVD = ''
          IF GIFT.RECVD  = 0 THEN GIFT.RECVD  = ''

          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
CHK.UNE:  LOCATE 'UNEARN' IN GL.AUTO<1> SETTING POS THEN
             GL.ERR = (GL.AUTO<2,POS>='')
          END ELSE
             GL.ERR = YES
          END
          IF GL.ERR THEN
             MESS 5,5,BELL:'G/L Unearned Revenue Account is not Defined'
          END

          RETURN
*-------------------------------------------------------------------------*
PAY.MISC: WINDOW 40,2,40,5,3
          PRINT @(0,0):'Payment Date : ':OCONV(PAYMENT.DT,'D4/')   "L#10"
          PRINT @(0,1):'Payment Time : ':OCONV(COLLECT.TIME,'MTH') "L#7"
          PRINT @(0,2):'Collected By : ':COLLECT.BY                "L#10"
          PRINT @(0,3):'Collect Loca : ':COLLECT.LOCA              "L#15":
          PRINT @(0,4):'Collect Brch : ':PAYMENT.BR                "L#4":

          CC.PMT = (LED(45)<1,PGEN,3> AND HAS.CC)

IN.PDAT:  INP P.DT,15,0,10,'D4/'
          IF CHANGED THEN
             CHK.GL.POST P.DT,OK,'C'
             IF NOT(OK) THEN
                MESS 2,2,BELL:'Payment Date is in a closed Period'
IN$$11:         INP A
                PRINT @(15,0):OCONV(PAYMENT.DT,'D4/') "L#10"
                GOTO IN.PDAT
             END
             PAYMENT.DT = P.DT
          END
          IF PAYMENT.DT = '' THEN PRINT BELL:; GOTO IN.PDAT
          IF QUIT THEN GOTO EXT.MISC
          ON MOVE+1 GOTO IN.PDAT, IN.PDAT, IN.PDAT, IN.PDAT

IN.PTIM:  INP COLLECT.TIME,15,1,7,'MTH'
          IF COLLECT.TIME='' THEN
             COLLECT.TIME = INT(TIME())
             PRINT @(15,1):OCONV(COLLECT.TIME,'MTH') "L#7"
          END
          IF QUIT THEN GOTO EXT.MISC
          ON MOVE+1 GOTO IN.PTIM, IN.PTIM, IN.PDAT, IN.PTIM

IN.CBY:   INP COLLECT.BY,15,2,8,V_'INITIALS'
          IF COLLECT.BY='' THEN PRINT BELL:; GOTO IN.CBY
          IF QUIT THEN GOTO EXT.MISC
          ON MOVE+1 GOTO IN.CBY, IN.CBY, IN.PTIM, IN.CBY

IN.CLOC:  INP COLLECT.LOCA,15,3,15,V_'S:VERF.LOC.MAINT'
          IF QUIT THEN GOTO EXT.MISC

          IF CC.PMT THEN
             ON MOVE+1 GOTO IN.CLOC,IN.CLOC,IN.CBY,IN.CLOC,IN.CLOC,IN.CLOC
          END ELSE
             ON MOVE+1 GOTO IN.CLOC, IN.CLOC, IN.CBY, IN.CLOC
          END

IN.PBR:   INP.BR 15,4,4,PAYMENT.BR
          IF PAYMENT.BR='' THEN GOTO IN.PBR
          IF PAYMENT.BR # O.PAYMENT.BR THEN
             CMNT<1,-1> = 'Payment ':OID:'.PINVN':' Collect Branch changed from ':O.PAYMENT.BR
          END
          COLLECT.BR = PAYMENT.BR
          IF QUIT THEN GOTO EXT.MISC
          ON MOVE+1 GOTO IN.PBR, IN.PBR, IN.CLOC, IN.PBR, IN.PBR
          GOTO IN.PBR

EXT.MISC: IF PAYMENT.BR='' THEN GOTO IN.PBR
          WINDOW.CLOSE

          RETURN
*-------------------------------------------------------------------------*
LOAD.HOTKEYS: *
          MENU.CLEAR

          MENU.LOAD  1,16, 5,1,'H'
          MENU.LOAD  7,16,13,7,'S'
          MENU.LOAD 21,16, 4,1,'C'
          MENU.LOAD 26,16, 5,3,'E'
          MENU.LOAD 32,16, 8,2,'R'
          MENU.LOAD 41,16, 6,5,'U'
          MENU.LOAD 48,16, 5,1,'P'
          MENU.LOAD 54,16, 9,1,'A'
          MENU.LOAD 64,16, 7,4,'I'
          MENU.LOAD 72,16, 7,1,'F'
          IF NOT(DISABLE.BODY) THEN
             MENU.LOAD  1,18, 4,1,'B'
          END ELSE
             MENU.LOAD ,,,,
          END
          MENU.LOAD  6,18,14,1,'V'
          MENU.LOAD 21,18, 3,3,'X'
          MENU.LOAD 25,18, 8,1,'L'
          MENU.LOAD 34,18, 8,7,'T'
          MENU.LOAD 43,18, 3,3,'G'
          MENU.LOAD 47,18,15,8,'O'
          MENU.LOAD   ,  ,  , ,'`'
          MENU.LOAD   ,  ,  , ,'~'

          RETURN
*-------------------------------------------------------------------------*
INIT:     * Initialization Routine
          GL.BR  = LED(2)<1,GEN,3>
          PGEN   = DCOUNT(LED(12),VM)+1
          UT.OPEN.FILE 'GIFT.CERTIFICATE',GIFTCERTFILE,ERR.MSG
          IF NEW.ORDER THEN
             SV.GEN = GEN
             GEN.CT = DCOUNT(LED(12),VM)
             FOR GN = 1 TO GEN.CT
                IF LED(6)<1,GN,1> = '$' THEN
                   PGEN = GN
                   EXIT
                END
             NEXT GN
             FOR GEN = 1 TO GEN.CT
                GOSUB INIT.GEN
             NEXT GEN
             GEN = SV.GEN
          END

          IF LED(30) = 'CINV' THEN
             PRINT @(28,0): BLINK$:'Consolidated Invoice':NORM$
          END

          SOE.CREDIT.CHECK LED(5)<1,GEN>,,,,,,CRED.MSG,OID,GEN
          GOSUB INIT.GEN

          EDIT.PREV.GC  = NO
          PREV.GC       = ''
          SV.GIFT.RECVD = ''
          SV.GIFT.NO    = ''
          CHANGE.CC.OK  = NO

          * First check control record to see if we need to do this
          READ CC.RET FROM CTRLFILE,'SOE.RETURN.SETUP' ELSE CC.RET=''
          IF CC.RET<1,1,3> = YES THEN
             * Get authorization for changing a credit card during a return
             * This will be disabled if the total amount is negative.
             CHECK.KEY 'OVERRIDE.RETURN.PAYMENT',CHANGE.CC.OK
             IF CHANGE.CC.OK = NO THEN
                * Now need to check to see if this is a return and if org
                * order was done on a CC...
                IF LED(121) = '' THEN
                   CHANGE.CC.OK = YES
                END
             END
          END ELSE
             CHANGE.CC.OK = YES
          END

          RETURN
*-------------------------------------------------------------------------*
INIT.GEN:
          * flag if it is a direct sales gen
          LOCATE LED(12)<1,GEN> IN LED(33)<1> SETTING DGEN THEN
             ISDIRECT = (LED(48)<1,DGEN> = 'DIRECT')
          END ELSE
             ISDIRECT = 0
          END

          GOSUB CHK.DIRECT.ONLY

          OE.LOT.CHECK.STATUS LOT.STAT,OID,GEN

          IF LED(30)<1,GEN>='CINV' THEN
             OE.ORDER.TOTAL OID,GEN,QSIGN,,SUB.TOL,FREIGHT,HANDLING,TAX.TOL,FET.AMT
             ORIG.AMT.DUE = 0
             AMT.PAID     = 0
             SOE.CALC.DISC OID,GEN,CASH.DISC,,ROE.DISC
             CASH.DISC += ROE.DISC
          END ELSE
             * Don't recalc tax if the order has been invoiced
             IF LED(8)<1,GEN> THEN CALC.TAX = NO ELSE CALC.TAX = YES
             OE.CALC.HNDL.ALL OID,GEN,QSIGN,YES,,HANDLING
             OE.CALC.FGHT.ALL OID,GEN,QSIGN,YES,CALC.TAX,,FREIGHT

             DO.LOT = NO
             IF LED(128)<1,1> THEN DO.LOT = YES

             OE.ORDER.TOTAL OID:VM:1,GEN,QSIGN,,SUB.TOL,,,TAX.TOL,,DO.LOT
             SOE.CALC.CASH OID,GEN,ORIG.AMT.DUE,AMT.PAID,CASH.DISC

             ***Get ROE.DISC
             SOE.CALC.DISC OID,GEN,,,ROE.DISC

             * Do not add the remote order entry disc if it is invoiced.
             * If it's invoiced, CASH.DISC returns from SOE.CALC.CASH
             * with the remote discount already added to it.
             IF NOT(LED(8)<1,GEN>) THEN
                CASH.DISC += ROE.DISC
             END
          END

          CASH.DISC.AVL  = -CASH.DISC
          CASH.DISC.PAID =  0

          IF LED(30)<1,1> # 'CINV' THEN
             AR.ID = OID:'.':LED(8)<1,GEN>"R%3"
             READ ARREC2 FROM ARFILE,AR.ID THEN
                IF AMT.PAID THEN
                   CASH.DISC.PAID = ASUB.GET.AMT(ARREC2,,,GL.AUTO.DISCG)
                   IF (CASH.DISC.PAID > 0) OR (CASH.DISC.PAID <0 AND AMT.PAID >0) OR (ROE.DISC) THEN
                      AMT.PAID      +=  CASH.DISC.PAID
                      CASH.DISC.PAID = -CASH.DISC.PAID
                      * Because ROE discount is always taken then show it
                      * taken once any payment has been made.
                      IF AMT.PAID THEN CASH.DISC.PAID += ROE.DISC
                   END
                END
                *** Pass AR.GET.DBAL the foreign currency so the discount
                *** available is calculated correctly.
                *** We must convert it back to base to be compatible with
                *** the rest of the program.
                CASH.DISC.AVL = AR.GET.DBAL(ARREC2,,,DT,ARREC2<31,1,1>)
                IF ARREC2<31,1,2> # "" THEN
                   CASH.DISC.AVL = OCONV(-CASH.DISC.AVL*ARREC2<31,1,2>,'MR4')
                   CASH.DISC.AVL  = CASH.DISC.AVL - ROE.DISC
                END ELSE
                   * Because ROE discount is always taken then show it
                   * taken once any payment has been made (and therefore
                   * it is no longer available)
                   IF NOT(AMT.PAID) THEN CASH.DISC.AVL += ROE.DISC
                   CASH.DISC.AVL  = -CASH.DISC.AVL
                END
                IF DT < DATE() THEN CASH.DISC.AVL = 0
             END
          END

          LOCATE 'CASHBOX' IN LED(24)<1,PGEN> SETTING POS THEN
             PAYMENT.BR  = FIELD(LED(25)<1,PGEN>,'~',1)
             PAYMENT.AMT = LED(26)<1,PGEN,POS>
          END ELSE
             * get terminal branch
             GET.TTY PAYMENT.BR
             PAYMENT.AMT = 0
          END

          * Get gift card payment
          GIFT.RECVD = LED(45)<1,PGEN,4>
          GIFT.NO    = LED(46)<1,PGEN,20>
          IF GIFT.RECVD THEN
             IF GIFT.NO THEN
                EDIT.PREV.GC = YES
                PREV.GC      = GIFT.NO
                READ GIFT.REC FROM GIFTCERTFILE,GIFT.NO THEN
                   GIFT.BAL  = GIFT.REC<3>
                   GIFT.EXP  = GIFT.REC<5>
                   GIFT.GL   = GIFT.REC<10>
                   * Update gift payment
                   LOCATE GIFT.GL IN LED(25)<1,PGEN> SETTING POS THEN
                      PAYMENT.BR   = FIELD(GIFT.GL,'~',1)
                      PAYMENT.AMT += LED(26)<1,PGEN,POS>
                   END
                END ELSE
                   GIFT.BAL = ''
                   GIFT.EXP = ''
                END
             END
          END ELSE
             EDIT.PREV.GC = NO
             PREV.GC = ''
          END

          O.GIFT.RECVD = GIFT.RECVD
          O.GIFT.NO    = GIFT.NO
          O.PAYMENT.BR = PAYMENT.BR

          FET.MODE = 'S'
          OE.CALC.FET.AMT FET.MODE,OID,GEN,QSIGN,FET.TOL
          AMT.DUE       = ORIG.AMT.DUE + PAYMENT.AMT
          CASH.RECVD    = LED(45)<1,PGEN,1>
          O.CASH.RECVD  = CASH.RECVD
          CHECK.RECVD   = LED(45)<1,PGEN,2>
          O.CHECK.RECVD = CHECK.RECVD
          CCARD.RECVD   = LED(45)<1,PGEN,3>
          O.CCARD.RECVD = CCARD.RECVD
          CHECK.NO      = LED(46)<1,PGEN,2>
          O.CHECK.NO    = CHECK.NO
          IF CCARD.RECVD THEN
             * FLD.ARGS are old LED 46 subval positions.  GET routine
             * will retrieve from new subval postion in LEDGER.CC fld 20
             FLD.ARGS      = 3   ;* cc number
             FLD.ARGS<1,2> = 4   ;* cc auth code
             FLD.ARGS<1,3> = 5   ;* cc type
             GET.LEDCC.VAL RTN.DATA,FLD.ARGS,OID,PGEN
             CCARD.NO  = RTN.DATA<1,1>
             AUTH.CODE = RTN.DATA<1,2>
             CC.TYPE   = RTN.DATA<1,3>

             * If site does not have the credit card mod and there's
             * a 1ENC trigger then keep the trigger since this payment
             * has already been updated in SOE.CREDIT.AUTH.
             IF NOT(HAS.CC) AND LED(46)<1,PGEN,3> = '1ENC' THEN
                CCARD.NO = '1ENC'
             END
          END ELSE
             CCARD.NO  = ''
             AUTH.CODE = ''
             CC.TYPE   = ''
          END
          IF CHECK.RECVD THEN AUTH.CODE = LED(46)<1,PGEN,13>
          TYPE<1,1>     = CC.TYPE            ; * CCard Type (MC,VI,etc)
          TYPE<1,2>     = LED(46)<1,PGEN,14> ; * Check Type (Company,etc)
          TYPE<1,3>     = LED(46)<1,PGEN,15> ; * ID Type (State ID)
          TYPE<1,4>     = LED(46)<1,PGEN,16> ; * ID Number (License No)
          TYPE<1,5>     = LED(46)<1,PGEN,17> ; * Bank Routing Number
          TYPE<1,6>     = LED(46)<1,PGEN,18> ; * Bank Account Number
          PAYMENT.DT    = LED(23)<1,PGEN>
          IF NOT(PAYMENT.DT) THEN PAYMENT.DT = DATE()
          O.PAYMENT.DT  = PAYMENT.DT
          COLLECT.BY    = LED(27)<1,PGEN,1>
          IF COLLECT.BY = '' THEN COLLECT.BY = USER.ID
          O.COLLECT.BY  = COLLECT.BY
          COLLECT.LOCA  = LED(27)<1,PGEN,2>
          IF COLLECT.LOCA = '' THEN COLLECT.LOCA = LOCATION
          O.COLLECT.LOCA= COLLECT.LOCA
          COLLECT.TIME  = LED(27)<1,PGEN,3>
          O.COLLECT.TIME= COLLECT.TIME
          CHANGE.AMT    = 0
          O.CHANGE.AMT  = CASH.RECVD - AMT.DUE

          FGHT.OVRD     = LED(36)<1,GEN,1>
          HNDL.OVRD     = LED(36)<1,GEN,2>
          TOL.FGHT      = LED(57)<1,1>
          TOL.HNDL      = LED(57)<1,2>

          LOCATE 'UNEARN' IN LED(24)<1,GEN> SETTING POS THEN
             UNEARN = -LED(26)<1,GEN,POS>
          END ELSE UNEARN = 0
          IF LED(8)<1,GEN> THEN
             CHK.GL.POST LED(23)<1,GEN>,OK,OID
             IF NOT(OK) OR LED(100)<1,GEN> OR LED(99)<1,GEN> THEN
                IF NOT(VIEW.OVRD) THEN
                   SV.VIEW.ONLY = VIEW.ONLY
                   VIEW.ONLY = YES
                   VIEW.OVRD = YES
                END
             END
          END

          *** Set up the foreign exchange rate for this order...
          IF LED(92)<1,GEN,2> THEN
             XRATE = OCONV(LED(92)<1,GEN,2>,'MR4')
             PRINT @(30,0):BLINK$:LED(92)<1,GEN,1>:' - ':XRATE:NORM$
          END ELSE
             XRATE = 1
          END

          *** Get today's exchange rate for payment postings
          XCURR.RATE.GET NXRATE,LED(92)<1,GEN,1>,PAYMENT.DT
          NXRATE = OCONV(NXRATE,'MR4')

          RETURN
*-------------------------------------------------------------------------*
RECALC.HNDL: * Need to recalculate handling across gens in case any product
             * moved from one gen to another.
          IF NOT(VIEW.ONLY) THEN
             GEN.CT = DCOUNT(LED(12),VM)
             FOR GEN = 1 TO GEN.CT
                IF GEN = START.GEN THEN CONTINUE
                IF LED(30)<1,GEN>='CINV' THEN CONTINUE
                OE.CALC.HNDL.ALL OID,GEN,QSIGN,YES
             NEXT GEN
             GEN = SV.GEN
          END

          RETURN
*-------------------------------------------------------------------------*
CHK.XMIT: *** Check if Hajoca AR has been transmitted.

          OPEN 'UD.HAJO.AR' TO HAJOFILE ELSE
             SEND.MESSAGE 'Phantom',USER.ID,'Could not open UD.HAJO.AR'
             RETURN
          END

          AR.ID = OID:'.':LED(8)<1,PGEN> 'R%3'
          READV XMIT.DT FROM HAJOFILE,AR.ID,3 ELSE XMIT.DT = ''

          IF XMIT.DT THEN
             MSG = 'Payment transmitted on ':OCONV(XMIT.DT,'D4/')
             MESS 5,5,BELL:MSG
IN$$7:       INPNO A,,,0
             PRINT @(2,0):BLINK$:'View Only':NORM$
             GOSUB INIT.GEN
             GOSUB DISP.PAYMENT
             PRINT @(2,0):BLINK$:'View Only':NORM$
IN$$10:      INPNO A,,,0
             PRINT @(2,0):''
             PGEN = SV.PGEN
          END

          RETURN
*-------------------------------------------------------------------------*
UPD.EARN:  *
          IF UNEARN THEN
             LED.GL.AUTOPOST OID,GEN,LED(2)<1,GEN,3>,'UNEARN',-UNEARN
          END ELSE
             LOCATE 'UNEARN' IN LED(24)<1,GEN> SETTING POS THEN
                LED(24) = DELETE(LED(24),1,GEN,POS)
                LED(25) = DELETE(LED(25),1,GEN,POS)
                LED(26) = DELETE(LED(26),1,GEN,POS)
             END
          END
          GOSUB ADD.GEN.MV
          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
UPD.FRT:  OE.TAX.CLEAR OID,GEN

          SV.FREIGHT = FREIGHT
          FREIGHT = LED(36)<1,GEN,3> + LED(36)<1,GEN,4> + LED(36)<1,GEN,5> + LED(36)<1,GEN,6>

          IF LED(6)<1,GEN>='Y' THEN
             LED.GL.AUTOPOST OID,GEN,GL.BR,'FGHT.IN',FREIGHT
          END ELSE
             *** Save override flag so we can check it later
             SV.OVRD = LED(36)<1,GEN,1>
             FRT.PMPT = NO
             FOR XX = 3 TO 6
                IF XX # 4 THEN
                   IF LED(36)<1,GEN,XX> + 0 # 0 THEN
                      FRT.PMPT = YES
                      EXIT
                   END
                END
             NEXT XX
             ANS = 'N'
             IF FRT.PMPT THEN
IN.FPMPT:       INP.PROMPT ANS,"There is freight in/out on this order, Override? ",'YN',1
             END ELSE
                ANS = YES
             END

             IF ANS THEN
                FREIGHT = SV.FREIGHT
                IF FREIGHT = '' THEN

                   LED(36)<1,GEN,1> = ''
                   FOR XX = 3 TO 6
                      LED(36)<1,GEN,XX> = ''
                   NEXT XX

                   *** if we have had pass along freight in the past then
                   *** we need to clear any line item freight we may have
                   *** backed out of COGS.
                   IF SV.OVRD = 5 OR SV.OVRD = 6 OR SV.OVRD = 7 THEN
                      REDISP = YES
                      SOE.RECALC.PASS.ALONG.FRT OID,GEN,QSIGN
                   END

                   OE.CALC.FGHT.ALL OID,GEN,QSIGN,YES,YES,,FREIGHT,YES
                END ELSE

                   FOR XX  = 3 TO 6
                      LED(36)<1,GEN,XX> = ''
                   NEXT XX

                   LED(36)<1,GEN,4> = FREIGHT * QSIGN

                   *** if we have had pass along freight in the past then
                   *** set the flag to indicate we should check for it
                   *** again in the future, even if it has been nulled out
                   IF SV.OVRD = 5 OR SV.OVRD = 6 OR SV.OVRD = 7 THEN
                      *** Set Override to null initially so we can
                      *** backout any COGS changes if control file set to
                      *** backout Pass Along freight from COGS.
                      LED(36)<1,GEN,1> = ''
                      REDISP = YES
                      SOE.RECALC.PASS.ALONG.FRT OID,GEN,QSIGN
                      LED(36)<1,GEN,1> = 6
                   END ELSE
                      LED(36)<1,GEN,1> = 2
                   END

                   IF LED(57)<1,1> THEN
                      *** Loop thru gens to find total overridden freight
                      GN.CT    = DCOUNT(LED(12),VM)
                      TMP.FGHT = 0
                      FOR GN = 1 TO GN.CT
                         OVRD.FLG = LED(36)<1,GN,1>
                         *** 1=In Billable Frt,2=Out Billable Frt,3= 1 & 2
                         *** 4=Prorated Freight amt from LED(57)
                         *** 5=Have Pass Along FGHT, 6=Billable and Pass
                         *** along frt, 7=Pass Along and PRORATED
                         IF OVRD.FLG=1 OR OVRD.FLG=2 OR OVRD.FLG = 3 OR OVRD.FLG = 5 OR OVRD.FLG = 6 OR OVRD.FLG = 7 THEN
                            TMP.FGHT += LED(36)<1,GN,3>*QSIGN
                            TMP.FGHT += LED(36)<1,GN,4>*QSIGN
                         END
                      NEXT GN
                      IF TMP.FGHT > LED(57)<1,1> THEN
                         PMPT ='This is greater than Total Freight entered'
                         PMPT :=' for order.':AM:'Increase Total Freight? '
                         ANS = 'Y'
IN$$18:                  INP.PROMPT ANS,PMPT,'YN',1
                         IF ANS THEN
                            LED(57)<1,1> = TMP.FGHT
                         END ELSE
                            LED(36)<1,GEN,4> = OLD.FREIGHT * QSIGN
                            LED(36)<1,GEN,1> = SV.OVRD
                         END
                      END
                   END

                   IF LED(8)<1,GEN> # '' THEN
                      OE.POST.FGHT.HNDL OID,GEN,QSIGN
                   *** Set up balancing entries.  Need to store LED values
                   *** in variables first because it won't update otherwise
                      GL.IDS  = LED(24)<1,GEN>
                      GL.NOS  = LED(25)<1,GEN>
                      GL.AMTS = LED(26)<1,GEN>
                      OE.UPD.GL.AR OID,GEN,GL.IDS,GL.NOS,GL.AMTS
                      LED(24)<1,GEN> = GL.IDS
                      LED(25)<1,GEN> = GL.NOS
                      LED(26)<1,GEN> = GL.AMTS
                      OE.UPDATE.INVOICE OID,GEN,QSIGN
                   END
                END
             END
          END
          GOSUB ADD.GEN.MV
          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
UPD.HDL:  OE.TAX.CLEAR OID,GEN

          SV.HANDLING = HANDLING
          HANDLING = LED(36)<1,GEN,7> + LED(36)<1,GEN,8> + LED(36)<1,GEN,9> + LED(36)<1,GEN,10>

          IF LED(6)<1,GEN>='Y' THEN
             LED.GL.AUTOPOST OID,GEN,GL.BR,'HDNL.IN',HANDLING
          END ELSE
             HND.PMPT = NO
             FOR XX = 7 TO 10
                IF XX # 8 THEN
                   IF LED(36)<1,GEN,XX> + 0 # 0 THEN
                      HND.PMPT = YES
                      EXIT
                   END
                END
             NEXT XX
             ANS = 'N'
             IF HND.PMPT THEN
IN.HPMPT:       INP.PROMPT ANS,"There is Handling in/out on this order, Override? ",'YN',1
             END ELSE
                ANS = YES
             END

             IF ANS THEN
                HANDLING = SV.HANDLING
                IF HANDLING = '' THEN
                   SV.OVRD = LED(36)<1,GEN,2>
                   LED(36)<1,GEN,2> = ''
                   FOR XX = 7 TO 10
                      LED(36)<1,GEN,XX> = ''
                   NEXT XX
                   OE.CALC.HNDL.ALL OID,GEN,QSIGN,YES,YES,HANDLING,YES
                END ELSE
                   FOR XX = 7 TO 10
                      LED(36)<1,GEN,XX> = ''
                   NEXT XX
                   LED(36)<1,GEN,8> = HANDLING * QSIGN
                   LED(36)<1,GEN,2> = 2

                   IF LED(57)<1,2> THEN
                      *** Loop thru gens to find total overridden handling
                      GN.CT    = DCOUNT(LED(12),VM)
                      TMP.HNDL = 0
                      FOR GN = 1 TO GN.CT
                         OVRD.FLG = LED(36)<1,GN,2>
                         *** 1=In Billable Frt,2=Out Billable Frt,3=Both
                         IF OVRD.FLG=1 OR OVRD.FLG=2 OR OVRD.FLG = 3 THEN
                            TMP.HNDL += LED(36)<1,GN,7>*QSIGN
                            TMP.HNDL += LED(36)<1,GN,8>*QSIGN
                         END
                      NEXT GN
                      IF TMP.HNDL > LED(57)<1,2> THEN
                         PMPT='This is greater than Total Handling entered'
                         PMPT:=' for order.':AM:'Increase Total Handling? '
                         ANS = 'Y'
IN$$19:                  INP.PROMPT ANS,PMPT,'YN',1
                         IF ANS THEN
                            LED(57)<1,2> = TMP.HNDL
                         END ELSE
                            LED(36)<1,GEN,8> = OLD.HANDLING * QSIGN
                            LED(36)<1,GEN,2> = SV.OVRD
                         END
                      END
                   END

                   CUR.HNDL = 0
                   FOR XX = 7 TO 10
                      CUR.HNDL += (LED(36)<1,GEN,XX> * QSIGN)
                   NEXT XX
                   OE.CALC.HNDL.TOT.RETURNS RET.HNDL,OID,GEN
                   IF ((RET.HNDL > 0) AND (CUR.HNDL < RET.HNDL)) THEN
                      HNDL.DIFF = (RET.HNDL - CUR.HNDL) * QSIGN
                      LED(36)<1,GEN,8> += HNDL.DIFF
                   END

                   IF LED(8)<1,GEN> # '' THEN
                      OE.POST.FGHT.HNDL OID,GEN,QSIGN
                   *** Set up balancing entries.  Need to store LED values
                   *** in variables first because it won't update otherwise
                      GL.IDS  = LED(24)<1,GEN>
                      GL.NOS  = LED(25)<1,GEN>
                      GL.AMTS = LED(26)<1,GEN>
                      OE.UPD.GL.AR OID,GEN,GL.IDS,GL.NOS,GL.AMTS
                      LED(24)<1,GEN> = GL.IDS
                      LED(25)<1,GEN> = GL.NOS
                      LED(26)<1,GEN> = GL.AMTS
                      OE.UPDATE.INVOICE OID,GEN,QSIGN
                   END
                END
             END
          END
          GOSUB ADD.GEN.MV
          GOSUB UPD.GENS
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
ADD.GEN.MV: *
          LOCATE GEN IN GEN.MV<1> SETTING XX ELSE
             GEN.MV<1,-1> = GEN
          END

          RETURN
*-------------------------------------------------------------------------*
DISPLAY:  PRINT @(28,3):BLINK$:CRED.MSG       "L#50":NORM$

          * Credit card dflt info is not GEN specific
          IF LED(121)<1,1> THEN
             PRINT @(34,16):BLINK$:"edtCrd":NORM$
          END ELSE
             PRINT @(34,16):NORM$:"edtCrd"
          END

          IF LOT.STAT = 1 THEN LOT.CHAR = 'L' ELSE LOT.CHAR = ' '

          IF LOT.STAT = 1 AND NOT(FGHT.OVRD) THEN
             F.ADDL = 2
          END ELSE
             *** Freight overrides were changed to 1,2,3 or 6
             *** List of SVM for LED(36)<1,GEN,X>:
             *** Note: you should never have pass along freight and inbound
             *** freight overrides at same time.
             ***  1 - Freight Override Flag - Values Defined Below:
             ***      1 - Incoming Freight has been overridden
             ***      2 - Outgoing Freight has been overridden
             ***      3 - Both 1 and 2 have been overriden
             ***      4 - Distribute LED(57) Prorated Total Freight over
             ***          all Gens
             ***      5 - Pass Along Freight from Hard Tags or "Soft Tag"
             ***          logic used
             ***      6 - Both 2 and 5 have been overriden
             ***      7 - Both 4 and 5 have been overriden
             *** Only want the '*' to show on non lot items
             BEGIN CASE
             CASE FGHT.OVRD = 1 OR FGHT.OVRD = 2 OR FGHT.OVRD = 3 OR FGHT.OVRD = 6
                F.ADDL = 1
             CASE FGHT.OVRD = 4
                F.ADDL = 3
             CASE OTHERWISE
                F.ADDL = FGHT.OVRD
             END CASE
          END

          IF LOT.STAT = 1 AND NOT(HNDL.OVRD) THEN
             H.ADDL = 2
          END ELSE
             *** Handling and freight overrides were changed to 1,2,or 3
             *** Only want the '*' to show on non lot items
             BEGIN CASE
             CASE HNDL.OVRD = 1 OR HNDL.OVRD = 2 OR HNDL.OVRD = 3
                H.ADDL = 1
             CASE HNDL.OVRD = 4
                H.ADDL = 3
             CASE OTHERWISE
                H.ADDL = HNDL.OVRD
             END CASE
          END

          F.OVRD = ' *LT'[F.ADDL+1,1]
          H.OVRD = ' *LT'[H.ADDL+1,1]

          SHP.DT = LED(9)<1,GEN>
          OE.SHIPDATE.CONV SHP.DT
          PRINT @(13,1):SHP.DT                      "L#10"

          PRINT @(43,1):ICONV(TOL.FGHT/XRATE,'MR0') "R26#8"
          PRINT @(69,1):ICONV(TOL.HNDL/XRATE,'MR0') "R26#8"
          PRINT @(13,3):ICONV(SUB.TOL/XRATE,'MR0')  "R26#12":LOT.CHAR
          PRINT @(13,4):ICONV(FREIGHT/XRATE,'MR0')  "R26#12":F.OVRD
          PRINT @(13,5):ICONV(HANDLING/XRATE,'MR0') "R26#12":H.OVRD

          IF LED(60)<1,GEN> = '' THEN TAX.OVRD = ' ' ELSE TAX.OVRD = '*'
          IF LOT.STAT # 1 THEN
             PRINT @(13,6):ICONV(TAX.TOL/XRATE,'MR0')  "R26#12":TAX.OVRD
          END ELSE
             TAX.TOL = 0
             PRINT @(13,6):'*Lot*'   "R#12"
          END

          PRINT @(13,7):ICONV(FET.TOL/XRATE,'MR0')  "R26#12"

          IF LOT.STAT # 1 THEN
             PRINT @(13,8):ICONV(CASH.DISC.PAID/XRATE,'MR0')"R26#12"
          END ELSE
             CASH.DISC.PAID = 0
             PRINT @(13,8):'*Lot*'   "R#12"
          END

          TOTAL    = SUB.TOL
          TOTAL   += FREIGHT
          TOTAL   += HANDLING
          TOTAL   += TAX.TOL
          TOTAL   += CASH.DISC.PAID
          TOTAL   += AMT.PAID
          TOTAL   += UNEARN
          TOTAL   += FET.TOL
          IF TOTAL = CASH.DISC THEN TOTAL = 0

          PRINT @(13,9):ICONV(AMT.PAID/XRATE,'MR0')     "R26#12"
          PRINT @(13,10):ICONV(UNEARN/XRATE,'MR0')      "R26#12"
          PRINT @(13,13):ICONV(TOTAL/XRATE,'MR0')       "R26#12":LOT.CHAR
          PRINT @(53,12):YN[LED(86)+1,1]                "L#1"
          NET.TOTAL = TOTAL-CASH.DISC.AVL
          BEGIN CASE
          CASE NOT(TERMS.OVRD)
             * Terms override CMP is not in use
             PRINT @(41,14):ICONV(CASH.DISC.AVL/XRATE,'MR0')  "R26#11"
             PRINT @(65,14):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
          CASE (SUMMATION(LED(45)))
             * Terms override is in use, but payment has been made
             * We show the net total for all payment types
             PRINT @(43,13):ICONV(CASH.DISC.AVL/XRATE,'MR0')  "R26#11"
             PRINT @(42,14):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
             PRINT @(66,12):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
             PRINT @(66,13):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
             PRINT @(66,14):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
          CASE OTHERWISE
             * Terms override is in use and no payment
             * Show the different totals based on terms ovrd avail
             PRINT @(43,13):ICONV(CASH.DISC.AVL/XRATE,'MR0')  "R26#11"
             PRINT @(42,14):ICONV(NET.TOTAL/XRATE,'MR0')      "R26#12"
             IF CASH.DFLT.TRMS THEN
                OVRD.TERM.TST = CASH.DFLT.TRMS
                GOSUB OVRD.TERMS.DISP
                CASH.OVRD.TOTAL = OVRD.TOTAL
                PRINT @(66,12):ICONV(OVRD.TOTAL/XRATE,'MR0')  "R26#12"
             END ELSE
                PRINT @(66,12):ICONV(NET.TOTAL/XRATE,'MR0')   "R26#12"
             END
             IF CHK.DFLT.TRMS THEN
                OVRD.TERM.TST = CHK.DFLT.TRMS
                GOSUB OVRD.TERMS.DISP
                CHK.OVRD.TOTAL = OVRD.TOTAL
                PRINT @(66,13):ICONV(OVRD.TOTAL/XRATE,'MR0')  "R26#12"
             END ELSE
                PRINT @(66,13):ICONV(NET.TOTAL/XRATE,'MR0')   "R26#12"
             END
             IF CC.DFLT.TRMS THEN
                OVRD.TERM.TST = CC.DFLT.TRMS
                GOSUB OVRD.TERMS.DISP
                CC.OVRD.TOTAL = OVRD.TOTAL
                PRINT @(66,14):ICONV(OVRD.TOTAL/XRATE,'MR0')  "R26#12"
             END ELSE
                PRINT @(66,14):ICONV(NET.TOTAL/XRATE,'MR0')   "R26#12"
             END
          END CASE
*-------------------------------------------------------------------------*
DISP.PAYMENT: *
          IF ASSIGNED(SV.CHANGE.AMT) THEN
             IF SV.CHANGE.AMT+0 # 0 THEN
                *** The UPD.GENS process nets cash received and change,
                *** so this is here to redisplay the original cash info
                CASH.RECVD = SV.CASH.RECVD
                CHANGE.AMT = SV.CHANGE.AMT
             END
          END
          PRINT @(42,4):ICONV(AMT.DUE/NXRATE,'MR0')    "R26#12"
          PRINT @(70,4):OCONV(PAYMENT.DT,'D2/')        "L#8"
          PRINT @(42,5):ICONV(CASH.RECVD/NXRATE,'MR0') "R26#12"
          PRINT @(62,5):ICONV(CHANGE.AMT/NXRATE,'MR0') "R26#12"
          PRINT @(42,6):ICONV(CHECK.RECVD/NXRATE,'MR0')"R26#12"
          PRINT @(62,6):CHECK.NO        "L#16"
          SV.DISP.CHK.AMT = ICONV(CHECK.RECVD/NXRATE,'MR0')
          SV.DISP.CHECK.NO = CHECK.NO
          PRINT @(42,7):ICONV(CCARD.RECVD/XRATE,'MR0') "R26#12"
          PRINT @(42,8):ICONV(GIFT.RECVD/XRATE,'MR0') "R26#12"
          PRINT @(62,8):GIFT.NO         "L#16"
          PRINT @(55,7):SPACE(24)
          PRINT @(55,9):SPACE(24)
          IF AUTH.CODE THEN
             PMT.DESC = ''
             IF CHECK.RECVD THEN PMT.DESC = 'Ck Apprvl:'
             IF CCARD.RECVD THEN PMT.DESC = 'CC Apprvl:'
             PRINT @(55,7):PMT.DESC
             PRINT @(65,7):AUTH.CODE[1,20] "L#13"
          END

          GOSUB GET.PREAUTHS
          IF PRE.AUTH.TOT THEN
             PRINT @(55,9):BLINK$:"Total Pre-Auths $":PRE.AUTH.TOT:NORM$
          END
          BAL.DUE = AMT.DUE-CASH.RECVD-CHECK.RECVD-CCARD.RECVD-GIFT.RECVD+CHANGE.AMT
          PRINT @(42,10):ICONV(BAL.DUE/NXRATE,'MR0')    "R26#12"

          IF ROE.DISC AND ROEDISP THEN
             WMSG  = 'Discount total includes a Remote Order discount ':AM
             WMSG := 'of '
             MESS 28,7,WMSG:OCONV(ROE.DISC,'MR2')
             ROEDISP = NO
          END

          *** Output amount due to the pole display
          POLE.MSG    = 'TOTAL'
          POLE.MSG<2> = OCONV(AMT.DUE,'MD2$')
          POLE.DISP.PRINT POLE.MSG, AM:'R'

          RETURN
*-------------------------------------------------------------------------*
SUBS:     *
          ON OPTION GOTO HEADER,CHNG.SHIPDATE,CASH.SALE,CHECK.SALE,CCARD.SALE,SUM.TOT,PAYMENTS,APP.PAY,CC.INFO,FGHT,BODY,VIEW.ALL,BOX.SUM,LOT.TOLS,CRS,SIG,CRD.OVRD,SALES.TAX,SALES.TAX
*-------------------------------------------------------------------------*
CASH.SALE: *
          IF VIEW.ONLY THEN RETURN
          IF PAYMENT.IN.CLOSED THEN RETURN
          IF NOT(BAL.DUE) THEN
             PRINT BELL:; RETURN TO IN.CASH
          END

          *** There is already a cash payment on this PGEN
          *** Make a new one so it does not get overwritten
          IF LED(45)<1,PGEN,1>+0 # 0 THEN
             PGEN = DCOUNT(LED(12)<1>,VM)+1
          END
          GOSUB PMT.INIT

          O.CASH.RECVD = CASH.RECVD
          IF CASH.OVRD.TOTAL THEN
             CASH.RECVD   = CASH.OVRD.TOTAL
          END ELSE
             CASH.RECVD   = BAL.DUE
          END

          GOSUB DISP.PAYMENT
          IF CASH.RECVD+0 # 0 THEN
             *** If bypassing INP of AMT, we need to set up the amount
             *** of the sale to respect foreign currency
             AMT = ICONV(CASH.RECVD/NXRATE,'MR0')
             RETURN TO IN.CASH2
          END ELSE
             CASH.RECVD = ''
             RETURN TO IN.CASH
          END
*-------------------------------------------------------------------------*
CHECK.SALE: *
          IF VIEW.ONLY THEN RETURN
          IF PAYMENT.IN.CLOSED THEN RETURN
          IF NOT(BAL.DUE) THEN
             PRINT BELL:; RETURN TO IN.CHK
          END

          *** There is already a check payment on this PGEN
          *** Make a new one so it does not get overwritten
          IF LED(45)<1,PGEN,2>+0 # 0 THEN
             PGEN = DCOUNT(LED(12)<1>,VM)+1
          END
          GOSUB PMT.INIT

          O.CHECK.RECVD = CHECK.RECVD
          IF CHK.OVRD.TOTAL THEN
             CHECK.RECVD   = CHK.OVRD.TOTAL
          END ELSE
             CHECK.RECVD   = BAL.DUE
          END

          GOSUB DISP.PAYMENT
          IF CHECK.RECVD+0 # 0 THEN
             *** If bypassing INP of AMT, we need to set up the amount
             *** of the sale to respect foreign currency
             AMT = ICONV(CHECK.RECVD/NXRATE,'MR0')
             RETURN TO IN.CHK2
          END ELSE
             CHECK.RECVD = ''
             RETURN TO IN.CHK
          END
*-------------------------------------------------------------------------*
CCARD.SALE: *
          IF VIEW.ONLY THEN RETURN
          IF PAYMENT.IN.CLOSED THEN RETURN

          IF NOT(BAL.DUE) THEN
             PRINT BELL:
             RETURN TO IN.CARD

          END

          *** warn users that the overriding a payment...
          IF LED(45)<1,PGEN,3>+0#0 AND NOT(HAS.CC) THEN
             PRMPT  = 'You Are About To Override A Payment Of '
             PRMPT := OCONV(LED(45)<1,PGEN,3>,'MR2'):'. Continue (Y/N)? '
             ANS    = 'N'
IN$$21:      INP.PROMPT ANS,PRMPT,'YN',1
             IF NOT(ANS) THEN RETURN
          END

          *** There is already a credit card payment on this PGEN
          *** Make a New one so it does not get overwritten
          IF LED(45)<1,PGEN,3>+0#0 AND HAS.CC THEN
             PGEN = DCOUNT(LED(12)<1>,VM)+1
          END

          GOSUB PMT.INIT
          IF CC.OVRD.TOTAL THEN
             CCARD.RECVD = CC.OVRD.TOTAL
          END ELSE
             CCARD.RECVD = BAL.DUE
          END

          GOSUB DISP.PAYMENT
          IF CCARD.RECVD+0#0 THEN
             NEW.PAYMNT = YES
             RETURN TO CC.SALE
          END ELSE
             RETURN TO IN.CARD
          END
*-------------------------------------------------------------------------*
HEADER:   GOSUB UPD.GENS
          SOE.HEADER OID,GEN,LOG.MV,NEW.ORDER,REDISP,'Totals',VIEW.ONLY,,POST.ENTRY
          IF MOVE=2 AND NOT(VIEW.ONLY) THEN RETURN TO FILEIT
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
BODY:     MOVE=2
          IF VIEW.ONLY THEN
             RETURN TO FINISH
          END ELSE
             RETURN TO FILEIT
          END
*-------------------------------------------------------------------------*
CHNG.SHIPDATE: *
          IF VIEW.OVRD THEN
             IF NOT(PAYMENT.IN.CLOSED) OR AUTH.OK THEN
                VIEW.ONLY = SV.VIEW.ONLY
                VIEW.OVRD = NO
             END
          END
          GOSUB UPD.GENS
          NEW.GEN = GEN
          OE.SELECT.SHIPDATE OID,NEW.GEN
          IF NEW.GEN+0#0 AND NEW.GEN#GEN THEN
             GEN = NEW.GEN
             ACT.ID$ = OID:'.':LED(8)<1,GEN>"R%3"
             GOSUB INIT.GEN
             AUTH.GEN = NEW.GEN
             GOSUB CHECK.AUTH.KEYS
             GOSUB DISPLAY
             GOSUB LOAD.HOTKEYS
             RETURN TO V.ONLY
          END

          RETURN
*-------------------------------------------------------------------------*
VIEW.ALL: IF REMOTE.CUST THEN RETURN
          GOSUB UPD.GENS
          CHECK.KEY 'SOE.CASH.REQD.EDIT',EDIT.OK
          SOE.VIEW.ALL.TOTALS OID,QSIGN,VIEW.ONLY,EDIT.OK
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
PAYMENTS: *

          GOSUB UPD.GENS
          PCT     = 0
          IF NEW.OK THEN
             PLIST = 'New'
             PCT + = 1
          END ELSE
             PLIST = ''
          END

          CC.LIST = ''
          CK.LIST = ''
          GEN.CT  = DCOUNT(LED(12),VM)
          *** Loop thru GENS and make list of Payments
          FOR GN = 1 TO GEN.CT
             IF LED(6)<1,GN>='$' THEN
                GOSUB GET.PAY.AMT.BR

                P =  OID:'.':LED(8)<1,GN> "R%3"
                P := PAY.BR"R#5"
                P := '  ':OCONV(LED(23)<1,GN>,'D2/')"L#8"
                P := (PAY.AMT/XRATE)"R26#12"
                P := '  ':LED(27)<1,GN,1>"L#10"
                P := '  ':LED(27)<1,GN,2>"L#10"
                TYP = ""
                PCT += 1
                BEGIN CASE
                *** Cash Received
                CASE LED(45)<1,GN,1> # ''
                   TYP=" Cash"
                *** Check Received + Number
                CASE LED(45)<1,GN,2> # ''
                   TYP=" Check ":LED(46)<1,GN,2>
                   CK.LIST<1,PCT> = LED(46)<1,GN,2>       ; * Check Number
                   CK.LIST<2,PCT> = LED(45)<1,GN,2>/XRATE ; * Check Amount
                   CK.LIST<3,PCT> = LED(46)<1,GN,13>      ; * Approval Code
                   CK.LIST<4,PCT> = GN                    ; * Payment Gen
                *** Credit Card Received
                CASE  LED(45)<1,GN,3> # ''
                   GET.LEDCC.VAL CC.NO,3,OID,GN
                   CREDIT.CARD.MASK MASK.ID,CC.NO
                   MASK.ID = MASK.ID[LEN(MASK.ID)-6,6]
                   TYP = " CC Aprv ":MASK.ID
                   TINVN = LED(8)<1,GN> "R%3"
                   CC.LIST<1,PCT> = OID:'.':TINVN
                *** Gift Card/Certificate Received
                CASE LED(45)<1,GN,4> # ''
                   TYP=" Gift Card"
                END CASE
                P := TYP"L#15"
                PLIST<1,PCT> = P
             END
          NEXT GN

          IF NOT(APP.PAY.FLG) THEN
             * Don't display Credit Card PreAuths, Declines, or Fails
             * when applying payments
             GOSUB GET.CREDIT.CARD.PREAUTHS.DECLINES.FAILS
          END
          CHECK.KEY 'SOE.PAYMENT.EDIT',EDIT.OK

          TITLE = 'Payments'
          IF NOT(EDIT.OK) THEN TITLE = TITLE:' - View Only'

          MENU.TABLE P,7,8,1,5,78,,,PLIST,TITLE
          IF P='' OR NOT(EDIT.OK) THEN RETURN
          SV.PGEN = PGEN

          RVONLY = VIEW.ONLY
          IF VIEW.OVRD THEN
             VIEW.ONLY = SV.VIEW.ONLY
             VIEW.OVRD = NO
          END

          PAYMENT.IN.CLOSED = NO

          *** New Payment - Increment PGEN
          IF P='New' THEN
             PGEN = DCOUNT(LED(12),VM)+1
          END ELSE
             CHECK.NO    = ''
             CHECK.RECVD = ''
             CHK.TYP     = ''
             ID.TYP      = ''
             ID.NUM      = ''
             ROUTING.NUM = ''
             ACCT.NUM    = ''
             AUTH.CODE   = ''
             PGEN        = ''
             NEW.PAYMNT  = NO
             *** Get numerical postion in select list
             LOCATE P IN PLIST<1> SETTING CPOS ELSE NULL
             *** The line selected is a credit card transaction
             IF CC.LIST<1,CPOS> # '' THEN
                CC.PAY.ID = CC.LIST<1,CPOS>
                EXT  = FIELD(CC.PAY.ID,'.',2)
                *** This record is a payment - Has a numerical extenstion
                *** Set payment GEN
                IF NUM(EXT) THEN
                   INVN = EXT+0
                   LOCATE INVN IN LED(8)<1> SETTING PGEN ELSE NULL
                   *** Check to see if payment is in closed period
                   CHK.GL.POST LED(23)<1,PGEN>,OK,'C'
                   IF NOT(OK) THEN
                      MESS 5,5,BELL:'Payment is in a closed Period',YES
                      PAYMENT.IN.CLOSED = YES
                   END
                   IF HAJOCA.SITE$ THEN GOSUB CHK.XMIT
                END ELSE
                   *** Not a payment - is a Pre-Auth/Decline/Fail
                   *** Increment payment GEN in case new one created
                   PGEN = DCOUNT(LED(12),VM)+1
                END

                *** Set values for current PGEN
                GOSUB INIT.GEN
                * Send pre-auth amount into credit card screen
                IF EXT[1,2] = 'PA' THEN
                   CCARD.RECVD = WRK<6>
                END

                * Setup collect branch based on current G/L branch
                * of an existing payment only
                COLLECT.BR = LED(2)<1,GEN,3>

                *** Bring Up Credit Card Screen for select credit card
                *** transaction
                IF APP.PAY.FLG THEN
                   *** Use RETURN if coming from the Apply Payments routine
                   APP.PAY.FLG = NO
                   RETURN
                END ELSE
                   RETURN TO CC.TRANSACTION
                END
             END

             *** Check transaction using check verification
             IF HAS.CK AND (CK.LIST<1,CPOS>#'' OR CK.LIST<2,CPOS>#'') AND REQ.CK.VERF THEN
                CHECK.NO    = CK.LIST<1,CPOS>
                CHECK.RECVD = CK.LIST<2,CPOS>
                AUTH.CODE   = CK.LIST<3,CPOS>
                PGEN        = CK.LIST<4,CPOS>

                *** Set values for current PGEN
                GOSUB INIT.GEN

                SOE.CHECK.AUTH OID,PGEN,GEN,CHECK.RECVD,CHECK.NO,AUTH.CODE,VIEW.ONLY,CHK.TYP,ID.TYP,ID.NUM,ROUTING.NUM,ACCT.NUM
                CASH.RECVD  = ''
                CCARD.RECVD = ''
                CCARD.NO    = ''
                TYPE        = ''
                TYPE<1,2>   = CHK.TYP
                TYPE<1,3>   = ID.TYP
                TYPE<1,4>   = ID.NUM
                TYPE<1,5>   = ROUTING.NUM
                TYPE<1,6>   = ACCT.NUM
                GOSUB UPD.GENS
                GOSUB INIT.GEN
                GOSUB DISPLAY
             END ELSE
                *** Is not a Credit Card or Check Verification
                *** Transaction - set up data
                INVN = TRIM(FIELD(FIELD(P,'.',2),' ',1))+0
                LOCATE INVN IN LED(8)<1> SETTING PGEN ELSE
                   PGEN = DCOUNT(LED(12),VM)+1
                END

                *** See if payment is in closed period
                CHK.GL.POST LED(23)<1,PGEN>,OK,'C'
                IF NOT(VIEW.ONLY) THEN
                   IF NOT(OK) THEN
                      MESS 5,5,'Payment is in a closed Period',YES
                      PAYMENT.IN.CLOSED = YES
                   END ELSE
                      IF HAJOCA.SITE$ THEN GOSUB CHK.XMIT
                   END
                END
             END
          END
SKIPPAY:
          GOSUB INIT.GEN
          GOSUB DISPLAY
          GOSUB CHK.AR

          IF PAYMENT.IN.CLOSED AND NOT(AUTH.OK) THEN
             IF NOT(VIEW.OVRD) THEN
                SV.VIEW.ONLY = VIEW.ONLY
                VIEW.ONLY = YES
                VIEW.OVRD = YES
             END
          END

          IF RVONLY # VIEW.ONLY THEN
             RETURN TO V.ONLY
          END

          RETURN
*-------------------------------------------------------------------------*
GET.PAY.AMT.BR: *
          *** Returns payment Amt and Branch
          *** GN must equal the GEN in question

          PAY.BR  = ''
          PAY.AMT = 0
          LOCATE 'CASHBOX' IN LED(24)<1,GN> SETTING POS THEN
             PAY.BR  = FIELD(LED(25)<1,GN>,'~',1)
             PAY.AMT = LED(26)<1,GN,POS>
          END ELSE
             * Check for gift card payments.
             GC.ID = LED(46)<1,GN,20>
             IF GC.ID THEN
                READV GIFT.GL FROM GIFTCERTFILE,GC.ID,10 THEN
                   LOCATE GIFT.GL IN LED(25)<1,GN> SETTING POS THEN
                      PAY.BR = FIELD(GIFT.GL,'~',1)
                      PAY.AMT = LED(26)<1,GN,POS>
                   END
                END
             END
          END

          RETURN
*-------------------------------------------------------------------------*
APP.PAY:  *** Apply Payments

          IF GIFT.RECVD AND GIFT.NO = '' THEN
             ERR.MESS 28,9,BELL:'Gift Card Number Required'
IN$$27:       INP A,,,0
             RETURN TO IN.GIFT
          END

          APP.PAY.FLG = YES
          IF VIEW.ONLY THEN PRINT BELL:; RETURN
          CHECK.KEY 'SOE.PAYMENT.APPLY',APPLY.OK
          CHECK.KEY 'SOE.PAYMENT.EDIT',EDIT.OK
          OLD.PGEN = PGEN
          GOSUB UPD.GENS
          LOCATE '$' IN LED(6)<1> SETTING POS ELSE PRINT BELL:; RETURN
          * Can't apply a pymt if there aren't any invoices.
          GN.CT = DCOUNT(LED(6)<1>,VM)
          FOUND.INV = NO
          FOR GG = 1 TO GN.CT
             IF LED(6)<1,GG> = 'I' THEN FOUND.INV = YES; EXIT
          NEXT GG
          IF NOT(FOUND.INV) THEN PRINT BELL:; RETURN
          IF LED(8)<1,PGEN> = '' THEN
             NEW.OK = NO
             GOSUB PAYMENTS
             APP.PAY.FLG = NO
             NEW.OK = YES
          END
          IF LED(8)<1,PGEN> = '' THEN RETURN
          SOE.APPLY.PAYMENT OID,PGEN,PAYMENT.IN.CLOSED

          *** If user can apply but not edit payments then put them back
          *** to where they were before they applied the payment.
          IF APPLY.OK AND NOT(EDIT.OK) THEN PGEN = OLD.PGEN
          GOSUB INIT.GEN
          GOSUB DISPLAY
          *** Reset APPLY.OK Flag to NO otherwise it will also pass as
          *** EDIT.OK flag above in PAYMENTS
          APPLY.OK = NO
          APP.PAY.FLG = NO

          RETURN
*-------------------------------------------------------------------------*
CC.INFO:
         * Check first to make sure this isn't a return and they have
         * auth to do this.
         CAN.CHANGE = NO
         IF CHANGE.CC.OK OR ICONV(TOTAL/XRATE,'MR0') > 0 THEN
             CAN.CHANGE = YES
         END ELSE
             * See if the user can get auth to change this.
             PROMPT.CMT = "Override Return Payment"
             KEY.REQUIRED = "OVERRIDE.RETURN.PAYMENT"
             OE.GET.AUTH OID,PROMPT.CMT,KEY.REQUIRED,CAN.CHANGE
         END
         IF CAN.CHANGE = YES THEN
             SOE.CREDIT.CARD.DEFAULT OID,GEN,VIEW.ONLY
             READV PRT.STAT FROM LEDLFILE,OID,9 ELSE LEDL = ''
             *** if the auth method is authorize after review and the print
             *** status is a 'B' then we need to switch it to a 'C'
             * Note: LED(121) values 7 and 12 maintained in LED 121
             IF LED(121)<1,7>  = 5 AND PRT.STAT<1,GEN> = 'B' THEN
                NEW.STAT = 'C'
                OE.UPD.PRINT.STAT OID,GEN,NEW.STAT
             END
          END

          RETURN
*-------------------------------------------------------------------------*
FGHT:     *
          SV.OVRD = LED(36)<1,GEN,1>
          FGHT.VIEW.ONLY = VIEW.ONLY
          IF NOT(FGHT.VIEW.ONLY) THEN
             IF NOT(FREIGHT.OK) AND NOT(HNDLING.OK)THEN
                FGHT.VIEW.ONLY = YES
             END
          END
          SOE.FGHT.CALC OID,GEN,QSIGN,LOG.MV,FGHT.VIEW.ONLY
          IF NOT(VIEW.ONLY) THEN
             OE.TAX.CLEAR OID,GEN
             OE.TAX.CALC  OID,GEN,QSIGN
             *** if we have had pass along freight in the past then
             *** if the freight override has changed to a non pass along
             *** amount then we need to run through recalc
             IF SV.OVRD > 4 AND LED(36)<1,GEN,1> < 5 THEN
                REDISP = YES
                SOE.RECALC.PASS.ALONG.FRT OID,GEN,QSIGN
             END
          END
          GOSUB INIT
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
BOX.SUM:  SOE.BOX.SUMMARY OID,GEN,VIEW.ONLY
          GOSUB INIT.GEN
          GOSUB DISPLAY

          RETURN
*-------------------------------------------------------------------------*
LOT.TOLS: OE.LOT.TOTALS OID,GEN,VIEW.ONLY
          GOSUB INIT.GEN
          GOSUB DISPLAY
          REDISP = YES

          RETURN
*-------------------------------------------------------------------------*
SUM.TOT:  *** Totals summary screen
          SOE.TOTALS.SUMMARY OID,QSIGN,VIEW.ONLY

          RETURN
*-------------------------------------------------------------------------*
CRS:      *** Sho  all of the cash receipts and amounta applied to this inv
          SOE.SHOW.PAYMENTS OID,GEN,QSIGN,XRATE

          RETURN
*-------------------------------------------------------------------------*
SIG:      *** Start signature capture software on PC client
          EPAD.APP.START OID,GEN

          RETURN
*-------------------------------------------------------------------------*
CRD.OVRD: *** Display Credit Override Amount
          SOE.CREDIT.OVERRIDE OID,GEN,,VIEW.ONLY

          RETURN
*-------------------------------------------------------------------------*
SALES.TAX:** Show breakdown of sales tax
          IF USE.STAX$ AND USE.STAX$ <= LED(9)<1,GEN> THEN
             GEOCODE = LED(79)<1,GEN,1>
             SALES.TAX.MAINT GEOCODE
          END

          RETURN
*-------------------------------------------------------------------------*
CHECK.PMNT.FLAGS: *
          DO.ABORT = NO
          CHECK.TYPE = ''
          BEGIN CASE
          CASE NOT(COMPANY.CHECK.FLAG) AND NOT(PERSONAL.CHECK.FLAG)
             CHECK.TYPE = 'Company or Personal Checks!'
          CASE NOT(COMPANY.CHECK.FLAG)
             CHECK.TYPE = 'Company Checks!'
          CASE NOT(PERSONAL.CHECK.FLAG)
             CHECK.TYPE = 'Personal Checks!'
          END CASE

          IF CHECK.TYPE THEN
             CHK.PRMPT = YES
             MESS 20,3,BELL:'Account is not Flagged for ':CHECK.TYPE
IN$$13:      INPNO A,,,0
             IF F12 THEN DO.ABORT = YES
          END



          RETURN
*-------------------------------------------------------------------------*
FILEIT:   *** Update all changes made on screen and exit


          SV.MOVE = MOVE

*-------------------------------------------------------------------------*
*** Credit Card Type Prompt
TYPE = TRANS('LEDGER.CC',OID,1,'X')
CARD.AMT =  LED(45)<1,PGEN,3>
CARD.AMT2 =  LED(45)<1,GEN,3>
IF TYPE # '' THEN
             SV.TYPE = TYPE
          END ELSE
             SV.TYPE = ''
          END
CCTYPE = ''
IF CARD.AMT AND TYPE = '' THEN
WINDOW ,,25,1,2,,'Enter Credit Card Type'
          PRINT @(0,1):SV.TYPE
INCCTYPE: INP CCTYPE,1,1,2,,,,,V_"C:VALID.CARDS"
IF QUIT AND SV.TYPE='' THEN
GOTO INCCTYPE
END
          WINDOW.CLOSE
          TYPE = CCTYPE


             AUTHTYPE = ''
             ORD.ID = OID:'.':LED(8)<1,GEN> "R%3"
             REFNO = ORD.ID
             LED(121)<1,1>  = TYPE               ;* Type of Credit Card
             LED(121)<1,7>  = AUTHTYPE           ;* Authtype
             LED(121)<1,12> = REFNO
              IF LED(121)<1,1> NE 'ENC' THEN

             CC.ADDL.ARGS = ''
*              Updates LEDGER.CC , and keeps sepcified values in 121
*              ex: values kept 7, 12 are still stored in LED(121)
             OE.LED.CC.UPD OID,'',CC.ADDL.ARGS

             END
END

*-------------------------------------------------------------------------*
          *** If there is cash or cc required and open balance due, do not
          *** allow user to escape without either taking payment or
          *** allowing them to override with proper auth
          IF CHK.REQD THEN
             PAYMENTS = CASH.RECVD + CHECK.RECVD + CCARD.RECVD + GIFT.RECVD
             BAL.DUE  = AMT.DUE - PAYMENTS + CHANGE.AMT

             *** Get credit card info unless order is fully paid
             IF TOTAL + CASH.DISC > 0 THEN
                *** Check on requirement for Credit Card Default Info
                NADDL    = LED(1)<1,GEN>  ;* Bill To
                NADDL<2> = LED(5)<1,GEN>  ;* Ship To
                CC.NEED.DFLT.INFO NEW.ORDER,DFLT.NEEDED,PAY.CC,CC.NADDL
                IF DFLT.NEEDED THEN
                   LOOP
                      SOE.CREDIT.CARD.DEFAULT OID,GEN,VIEW.ONLY,CCERR
                   UNTIL NOT(CCERR) DO REPEAT
                END
             END
             *** Prompt override cash if there is balance due remaining
             IF BAL.DUE > 0 AND QUIT THEN
                *** Check on Cash Required if there is a Balance Due
                PRMPT.CMT = 'Override cash Required'
                KEY.REQD  = 'SOE.CASH.REQD.EDIT'
                OE.GET.AUTH OID,PRMPT.CMT,KEY.REQD,OVERRIDE.OK

                IF NOT(OVERRIDE.OK) THEN GOTO IN.CASH

                IF LED(40)<1,GEN>+0#0 THEN
                   PRINT BELL:
                   EDIT.OK = YES
                   SOE.VIEW.ALL.TOTALS OID,QSIGN,VIEW.ONLY,EDIT.OK
                END
SKIP.REQ:    END
          END

          * If a payment was made, call routine to print a receipt and
          * open a cash drawer.
          IF NEW.PAYMNT THEN
             SOE.PRINT.SLIP OID, GEN, PAY.INFO
             *** If cash has been received and a cash drawer is attached
             *** then display change due to the pole display and screen
             IF TTY.DATA<12,2> AND CASH.RECVD THEN
                CHG.TXT = OCONV(CHANGE.AMT,'MD2$')
                POLE.DISP.PRINT 'CHANGE':AM:CHG.TXT,AM:'R'
                MESS 30,5,' ':AM:'   Change Due: ':CHG.TXT:'   ':AM:' '
IN$$22:         INP A,,,0
             END
          END

          GOSUB UPD.GENS
          GOSUB LOG.ABC
          GOSUB PAY.APP
          MOVE = SV.MOVE
          GOTO FINISH
*-------------------------------------------------------------------------*
UPD.GENS: *** Credit Card Payments needed to call to call this routine
          *** outside SOE.TOTALS so the routines is now SOE.TOTALS.UPD.GENS
          IF VIEW.ONLY THEN RETURN

          * Return if a Gift Certificate payment is trying to be
          * applied without a Gift Certificate Number.
          IF GIFT.RECVD OR EDIT.PREV.GC THEN
             IF GIFT.NO = '' AND GIFT.RECVD THEN
                ERR.MESS 28,9,BELL:'Gift Card Number Required'
IN$$28:         INP A,,,0
                RETURN
             END

             * Nothing changed, so no update is necessary
             IF (O.GIFT.RECVD = GIFT.RECVD) AND (O.GIFT.NO = GIFT.NO) THEN
                RETURN
             END

             * If they changed an existing the Gift Number, then back out
             * the value from the original Gift Card/Certificate.
             IF O.GIFT.NO AND O.GIFT.NO # GIFT.NO THEN
                UPD.GC     = O.GIFT.NO
                UPD.GC.AMT = O.GIFT.RECVD
                UPD.METH   = 'D'
                GOSUB UPD.GC
             END

             * Now update the entered gift card/certificate
             UPD.GC      = GIFT.NO
             UPD.GC.AMT  = O.GIFT.RECVD
             IF GIFT.RECVD THEN
                UPD.METH = 'U'
             END ELSE
                UPD.METH = 'D'
             END
             GOSUB UPD.GC
          END

          *** Set data to update payment
          SOE.TOTALS.SET.PAY OID,GEN,PGEN,CASH.RECVD,CHECK.RECVD,CCARD.RECVD,GL.BR,PAYMENT.BR,COLLECT.BY,COLLECT.LOCA,COLLECT.TIME,PAYMENT.DT,CHANGE.AMT,CHECK.NO,CCARD.NO,AUTH.CODE,GEN.MV,LOG.MV,CMNT,PAY.INFO,TYPE,REFNO,,GIFT.RECVD,GIFT.NO

          * if this payment came in as part of the conversion then we
          * don't want to allow users to update it.  If changes need
          * to be made they should be made by creating an adjustment
          * payment or credit.
          UPD.OK = YES
          IF LED(100)<1,PGEN> OR LED(99)<1,PGEN> THEN UPD.OK = NO

          IF UPD.OK THEN
             *** Update Payment
             SOE.TOTALS.UPD.GENS PAY.INFO
          END ELSE
             MSG  = 'Changes Not Allowed On Converted Payments.'
             MSG := ' Changes Will Not Be Saved!'
             ERR.MESS 5,5,MSG,YES
          END

          *** Get data used to update payment
          SOE.TOTALS.GET.PAY OID,GEN,PGEN,CASH.RECVD,CHECK.RECVD,CCARD.RECVD,GL.BR,PAYMENT.BR,COLLECT.BY,COLLECT.LOCA,COLLECT.TIME,PAYMENT.DT,CHANGE.AMT,CHECK.NO,CCARD.NO,AUTH.CODE,GEN.MV,LOG.MV,CMNT,PAY.INFO,TYPE,REFNO,,GIFT.RECVD,GIFT.NO

          PAYMENTS = CASH.RECVD + CHECK.RECVD + CCARD.RECVD
          BAL.DUE  = AMT.DUE - PAYMENTS + CHANGE.AMT

          RETURN
*-------------------------------------------------------------------------*
UPD.GC: *** Update the Gift Card/Certificate information on disk

          READ GIFT.REC FROM GIFTCERTFILE,UPD.GC THEN
             APP.OID = RAISE(GIFT.REC<8>)
             APP.AMT = RAISE(GIFT.REC<9>)
             UPD     = NO
             OCCR    = 1

             LOOP
                LOCATE OID IN APP.OID,OCCR SETTING FND ELSE EXIT

                IF APP.AMT<FND> # UPD.GC.AMT THEN
                   OCCR += 1
                   CONTINUE
                END

                BEGIN CASE
                CASE UPD.METH = 'D'               ;* Delete
                   APP.OID = DELETE(APP.OID,FND)
                   APP.AMT = DELETE(APP.AMT,FND)
                CASE UPD.METH = 'U'               ;* Update
                   APP.AMT<FND> = GIFT.RECVD
                END CASE

                UPD = YES
                EXIT
             REPEAT

             * If we couldn't find a matching reference to the previous
             * gift card amount, then just add the current one to the end.
             IF NOT(UPD) AND UPD.METH = 'U' THEN
                APP.OID<-1> = OID
                APP.AMT<-1> = GIFT.RECVD
                UPD         = YES
             END

             IF UPD THEN
                GIFT.REC<3> = GIFT.REC<2> - SUM(APP.AMT)
                GIFT.REC<8> = LOWER(APP.OID)
                GIFT.REC<9> = LOWER(APP.AMT)

                GIFT.BAL    = GIFT.REC<3>
                WRITE GIFT.REC ON GIFTCERTFILE,UPD.GC
             END
          END ELSE
             ERR.MSG = 'Unable to update Gift Card : ':UPD.GC
             ERR.MESS 28,9,BELL:ERR.MSG,YES
          END

          RETURN
*-------------------------------------------------------------------------*
LOG.ABC:
          * Log ABC Payment *
          ABC.ENABLED = NO
          IF ABC.ENABLED$ THEN
             CTRB.ID = "ABC.ENABLED~":LED(2)<1,GEN,2>
             READV ABC.ENABLED FROM CTRBFILE,CTRB.ID,1 ELSE ABC.ENABLED=NO
          END
          IF ABC.ENABLED THEN
             SV.OID.DATA = OID.DATA$  ;* save values before nulling
             OID.DATA$ = ''
             OID.DATA$<1> = OID
             OID.DATA$<2> = GEN
             OID.DATA$<3> = ''
             OID.DATA$<4> = LED(5)<1,GEN>
             IF CASH.RECVD + CHECK.RECVD THEN
                ABC.LOG.AUTO 'CRPAYCSH'
             END
             IF CCARD.RECVD THEN
                ABC.LOG.AUTO 'CRPAYCC'
             END
             OID.DATA$ = SV.OID.DATA ;* restore values set previously
          END

          RETURN
*-------------------------------------------------------------------------*
PAY.APP:  *** Have Eclipse automatically apply unapplied payments for
          *** payments that match invoiced (in dollar amounts). Then,
          *** allow the user select payments that do not match.
          OE.POST.INV.APPLY OID,GEN,PGIDS
          P.CT = DCOUNT(PGIDS<1>,VM)
          FOR CT = 1 TO P.CT
             LOCATE PGIDS<1,CT> IN LED(12)<1> SETTING PGEN THEN
                SOE.APPLY.PAYMENT OID,PGEN,PGIDS<2,CT>
             END
          NEXT CT

          RETURN
*-------------------------------------------------------------------------*
GET.PREAUTHS:
          *** Get totals amount of Pre-Auth dollars that are toward this
          *** order
          PRE.AUTH.TOT = ''
          IF NOT(HAS.CC) THEN RETURN

          *** Get list of CC.PAYMENTS pre-auths good toward this order
          CREDIT.CARD.GET.PREAUTHS OID,PRE.AMTS
          IF NOT(PRE.AMTS) THEN RETURN

          PRE.AUTH.TOT = OCONV(SUMMATION(PRE.AMTS),'MR2')

          RETURN
*-------------------------------------------------------------------------*
GET.CREDIT.CARD.PREAUTHS.DECLINES.FAILS:
          *** Add Preauths/Declines/Fails to human readable list. Also add
          *** to list of CC.PAYMENTS ids so the record can be brought up
          *** by SOE.CREDIT.AUTH

          IF NOT(HAS.CC) THEN RETURN

          *** Number of lines on PLIST
          NUM.PLIST = DCOUNT(PLIST,VM)

          *** Get List of CC.PAYMENTS records toward this order
          CREDIT.CARD.GET.RECS OID,TLIST,TRAN.CT

          *** Loop through and find PreAuths, Declines and Fails
          FOR XX  = 1 TO TRAN.CT
             CCPAYID = TLIST<1,XX>
             EXT     = FIELD(CCPAYID,'.',2)
             *** Numerical extension = payment - Skip it
             *** Voided Record                 - Skip it
             IF NUM(EXT) THEN CONTINUE

             *** Read in CC.PAYMENTS record
             READ WRK FROM CCPFILE,CCPAYID ELSE CONTINUE

             P =  CCPAYID                 "L#14"    ;* Record ID
             P := SPACE(5)                "L#5"
             P := '  ':OCONV(WRK<1>,'D2/')"L#8"     ;* Transaction Date
             P := OCONV(WRK<6>,'MR2')     "R2#12"   ;* Amount
             P := '  ':WRK<8>             "L#10"    ;* User
             BEGIN CASE
             CASE EXT[1,2] = 'DC'
                P := '  Declined Credit Card'
             CASE EXT[1,2] = 'PA'
                P := '  Pre-Authorized CCard'
             CASE EXT[1,2] = 'FA'
                P := '  Failed CCard Transaction'
             CASE EXT[1,2] = 'VS'
                P := '  Voided CCard Transaction'
             END CASE

             *** Add Line to PLIST and record ID to CC.LIST
             NUM.PLIST += 1
             PLIST<1,NUM.PLIST>   = P
             CC.LIST<1,NUM.PLIST> = CCPAYID

          NEXT XX

          RETURN
*-------------------------------------------------------------------------*
CHK.AR:   *** This routine will check to see if the money paid was applied
          *** to this order or not and notify user if it has not.
          *** Message should only display if the payment has been applied
          *** to an order other than the current order.
          ORD.ID = OID:'.':LED(8)<1,GEN> "R%3"
          PAY.ID = OID:'.':LED(8)<1,PGEN>"R%3"

          *** Check to see if there is a AR payment on file
          READV PAY.REC FROM ARFILE,PAY.ID,2 ELSE PAY.REC = ''
          IF NOT(PAY.REC) THEN RETURN

          *** If there is, see if it that AR was applied to current order
          FOR I=2 TO DCOUNT(PAY.REC, VM)
             CHK.PAY = FIELD(PAY.REC<1,I>,".",2,2)
             IF CHK.PAY THEN
                READV TEST FROM ARFILE,CHK.PAY,2 ELSE GOTO NEXTI
                *** If payment is tied to this order then exit
                FINDSTR ORD.ID IN TEST SETTING X,Y THEN GOTO FOUND1
             END
NEXTI:    NEXT I

          *** Payment was not for this order so do not count it on order
          *** Undo -> AMT.DUE = ORIG.AMT.DUE + PAYMENT.AMT
          AMT.DUE = ORIG.AMT.DUE
          PRINT @(42,4):ICONV(AMT.DUE/XRATE,'MR0')     "R26#12"
          MESS 10,1,BELL:"Payment Has Been Applied to a Different Order or a Different GEN."
IN$$14:   INPNO A,,,0

FOUND1:   RETURN
*-------------------------------------------------------------------------*
PMT.INIT: *** Cash Payment on this PGEN already
          IF LED(45)<1,PGEN,1> # 0 THEN
             CASH.RECVD = LED(45)<1,PGEN,1>
          END ELSE
             CASH.RECVD = 0
          END
          *** Check Payment on this PGEN already
          IF LED(45)<1,PGEN,2> # 0 THEN
             CHECK.RECVD = LED(45)<1,PGEN,2>
             CHECK.NO    = LED(46)<1,PGEN,2>
             CHK.TYP     = LED(46)<1,PGEN,14>
             ID.TYP      = LED(46)<1,PGEN,15>
             ID.NUM      = LED(46)<1,PGEN,16>
             ROUTING.NUM = LED(46)<1,PGEN,17>
             ACCT.NUM    = LED(46)<1,PGEN,18>
          END ELSE
             CHECK.RECVD = 0
             CHECK.NO    = ''
             CHK.TYP     = ''
             ID.TYP      = ''
             ID.NUM      = ''
             ROUTING.NUM = ''
             ACCT.NUM    = ''
          END
          *** Credit Card Payment on this PGEN already
          IF LED(46)<1,PGEN,3> AND LED(45)<1,PGEN,3> # 0 THEN
             CCARD.RECVD = LED(45)<1,PGEN,3>
             IF LED(46)<1,PGEN,3> = '1ENC' THEN
                GET.LEDCC.VAL AUTH.CODE,4,OID,PGEN
             END ELSE
                AUTH.CODE = ''
             END
          END ELSE
             CCARD.RECVD = 0
             AUTH.CODE   = ''
          END

          *** Gift Card/Certificate Payment on this PGEN already
          IF LED(46)<1,PGEN,20> AND LED(45)<1,PGEN,4>+0 # 0 THEN
             GIFT.RECVD = LED(45)<1,PGEN,4>
             GIFT.NO    = LED(46)<1,PGEN,20>
          END ELSE
             GIFT.RECVD = ''
             GIFT.NO    = ''
          END

          CHANGE.AMT = 0

          RETURN
*-------------------------------------------------------------------------*
CHK.DIRECT.ONLY:
          * Check if this order has direct gen(s) ONLY.
          * If true, zero out Total Freight and handling in LED(57)
          * else, do nothing.

          DIRECT.ONLY = YES
          LOCATE 'DIRECT' IN LED(48)<1> SETTING DUMMY THEN
             CNT = DCOUNT(LED(12)<1>, VM)
             FOR DX = 1 TO CNT
                LOCATE LED(12)<1,DX> IN LED(33)<1> SETTING DUMMY ELSE
                   DIRECT.ONLY = NO
                   EXIT
                END
             NEXT DX
          END ELSE DIRECT.ONLY = NO

          * If it dierect only, zero out LED(57) Total Freight & Handling
          IF DIRECT.ONLY THEN
             LED(57)<1,1> = 0
             LED(57)<1,2> = 0
          END

          RETURN
*-------------------------------------------------------------------------*
UPD.TERMS.OVRD: *** Override terms upon cash(chk,cc) payment

          * Sites can use a global control record to set default
          * override terms to use when paying at the time of pickup.
          * This allows sites to not give the standard cust acct terms
          * disc if they are not putting order on the A/R account.
          IF RESET.TERMS THEN
             OVRD.TERMS = LED(135)<1,GEN>
          END ELSE
             A = ''
             MESS 20,3,BELL:'Overriding terms to ':OVRD.TERMS,YES
          END

          TRM.GN.CT = DCOUNT(LED(12),VM)

          FOR GN = 1 TO TRM.GN.CT
             * Don't change terms on cancelled, directs or payment gens
             IF INDEX('X$YB',LED(6)<1,GN>,1) THEN

                * If the status is a Bid though, we still want to
                * change the terms to the credit card override terms
                IF (LED(6)<1,GN> = "B") THEN
                   MSG  = 'Changed Terms from : ':LED(29)<1,GN>
                   MSG := ' to ':OVRD.TERMS
                   OE.ADD.COMMENT OID,GN,MSG
                   LED(135)<1,GN> = LED(29)<1,GN>
                   LED(29)<1,GN> = OVRD.TERMS
                   IF RESET.TERMS THEN LED(135)<1,GN> = ''
                END
             END ELSE
                DT.OK = YES
                IF LED(8)<1,GN> THEN
                   CHK.GL.POST LED(23)<1,GN>,DT.OK,OID
                END
                IF DT.OK THEN
                   MSG  = 'Changed Terms from : ':LED(29)<1,GN>
                   MSG := ' to ':OVRD.TERMS
                   OE.ADD.COMMENT OID,GN,MSG
                   LED(135)<1,GN> = LED(29)<1,GN>
                   LED(29)<1,GN> = OVRD.TERMS
                   IF RESET.TERMS THEN LED(135)<1,GN> = ''
                   OE.CALC.TERMS OID,GN
                   IF LED(8)<1,GN> THEN
                      INV.NO = OID:'.':LED(8)<1,GN>"R%3"
                      READVU TST FROM ARFILE,INV.NO,0 THEN
                         SOE.CALC.DISC OID,GN,TDISC,YES:VM:YES
                         WRITEV TDISC ON ARFILE,INV.NO,9
                      END ELSE
                         RELEASE ARFILE,INV.NO
                      END
                   END
                   IF GN = GEN THEN
                      SOE.CALC.CASH OID,GN,AMT.DUE
                   END
                END
             END
          NEXT GN
          RESET.TERMS = NO

          RETURN
*-------------------------------------------------------------------------*
OVRD.TERMS.DISP: *** Set override cash disc for display only
          SV.TERMS = LED(29)<1,GEN>
          LED(29)<1,GEN> = OVRD.TERM.TST
          OE.CALC.TERMS OID,GEN
          SOE.CALC.DISC OID,GEN,OVRD.CASH.DISC,YES,RDISC
          OVRD.CASH.DISC += RDISC

          OVRD.DISC.AVL  = -OVRD.CASH.DISC
          OVRD.TOTAL     = TOTAL-OVRD.DISC.AVL
          LED(29)<1,GEN> = SV.TERMS
          OE.CALC.TERMS OID,GEN

          RETURN
*-------------------------------------------------------------------------*
CHECK.AUTH.KEYS: * Check authorizations
          INV.EDIT.OK = YES
          FREIGHT.OK  = NO
          HNDLING.OK  = NO
          UNEARNED.OK = NO
          TAX.OK      = NO
          TAX.LVL     = 0

          IF LED(8)<1,AUTH.GEN> THEN
             AUTH.KEY = OID[1,1]:'OE.CLOSED.ORDER.EDIT'
             CHECK.OE.CLOSED.AUTH.KEYS OID,AUTH.GEN,AUTH.KEY,INV.EDIT.OK
          END
          IF INV.EDIT.OK THEN
             * Only allow user to edit frt & handling if they have auth
             * to edit closed invoices
             CHECK.KEY 'SOE.FREIGHT.EDIT',FREIGHT.OK
             CHECK.KEY 'SOE.HANDLING.EDIT',HNDLING.OK
             CHECK.KEY 'SOE.SINGLE.INVOICE',UNEARNED.OK
             CHECK.KEY 'SOE.TAX.EDIT',TAX.OK,TAX.LVL
          END

          AUTH.OK=FREIGHT.OK OR HNDLING.OK OR TAX.LVL > 2 OR UNEARNED.OK

          RETURN
*-------------------------------------------------------------------------*
GET.CC.AUTH: *** Determine if authorization is needed to change CC info or
          *** accept cash, etc, on a return.
          IF CHANGE.CC.OK OR ICONV(TOTAL/XRATE,'MR0') >= 0 THEN
             CHANGE.CC.OK = YES
          END ELSE
             * See if the user can get auth to change this.
             PROMPT.CMT = "Override Return Payment"
             KEY.REQUIRED = "OVERRIDE.RETURN.PAYMENT"
             OE.GET.AUTH OID,PROMPT.CMT,KEY.REQUIRED,CHANGE.CC.OK
          END
          RETURN
*-------------------------------------------------------------------------*

*-------------------------------------------------------------------------*
FINISH:   WINDOW.CLOSE
          SV.MOVE = MOVE
          POLE.DISP.PRINT
          OE.TRIGGERS 8,OID,GEN,NEW.ORDER,,VIEW.ONLY
          MOVE = SV.MOVE

          RETURN
*-------------------------------------------------------------------------*
!SMITJR~07/06/11~14:10
